161228 .net+native p/invoke 관련 참고자료
최근에 uwp 어플리케이션에서 win32 dll 과 연동할 일이 있었는데 참고 했던 좋은 자료들...
project p/invoke 튜토리얼 시리즈
msdn p/invoke 튜토리얼
상호 타입변환은 아래와 같음.
.net( wpf, uwp, .net ... )
|
native (win32 dll, exe)
| |
숫자
|
int, double, long
|
int, double, long
|
불린
|
bool
|
bool
|
ansi 문자열(.net -> native)
|
[MarshalAs(UnmanagedType.LPStr)] string
|
[in] const char*
|
유니코드 문자열(.net -> native)
|
[MarshalAs(UnmanagedType.LPWStr)] string
|
[in] const wchar_t*
|
ansi 문자열(native -> .net)
|
[MarshalAs(UnmanagedType.LPStr)] StringBuilder
|
[out, return] const char*
|
유니코드 문자열(native -> .net)
|
[MarshalAs(UnmanagedType.LPWStr)] StringBuilder
|
[out, return] const wchar_t*
|
바이트배열
|
byte[]
|
unsigned char*
|
그외 코딩시 유의사항)
문자열이나 바이트배열을 native->.net 으로 전달할때는 SystemAllocXXX 로 메모리를 프로세스 영역외부에 확보해서 리턴해야 함.
아래 예제에서는 간단하게 CString::AllocSysString() 을 사용함.
MYSIMPLENATIVEDLL_API LPCWSTR GetStr()
{
CStringW strTmp = L"abc가나다123";
return strTmp.AllocSysString();
}
|
샘플코드 :
이 글은 Evernote에서 작성되었습니다. Evernote는 하나의 업무 공간입니다. Evernote를 다운로드하세요. |
댓글
댓글 쓰기