참조

http://btd86.tistory.com/119

 

원출처

http://blog.naver.com/just720?Redirect=Log&logNo=40137298010

 

IntPtr 구조체 (MSDN)

https://msdn.microsoft.com/ko-kr/library/system.intptr(v=vs.110).aspx

 

BSTR 정의 (MSDN)

https://msdn.microsoft.com/en-us/library/windows/desktop/ms221069(v=vs.85).aspx

 

C#에서는 IntPtr구조체로 정의해야 한다.

즉, 문자열을 포인터 값으로 파라미터를 정의해서 넘겨주는 것으로

참조하는 DLL의 함수에서는

BSTR로 파라미터를 정의한다.

BSTR은 OLECHAR* 로 정의되어있는데

COM 오브젝트간의 문자전송 규약인것 같다.

 

 

>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>

 

<C# 코드>

 

===== 선언부 ===== 

 

[DllImport("KnvRecog.dll")]
public static extern void SetInit(IntPtr _argv);

 

===== 실제 코드 =====

 

IntPtr _IntPtr = Marshal.StringToBSTR("testString");

 

<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<

 

<C++ DLL 코드>

 

DLL_extern "C" __declspec(dllexport) void SetInit(BSTR _argv)

{

    CString argv;

    argv.Format(_T("%s"), _argv);

}

 

이렇게 C#에서 C++ (DLL)로 CString을 전달할 수 있다.

 

Posted by 휘프노스
,