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를 다운로드하세요.

댓글