C#
C#에서 C++로 만든 DLL에 CString 넘기기
휘프노스
2016. 1. 13. 18:01
참조
원출처
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을 전달할 수 있다.