Dll 로드시 자료형..
Program/C# 2008. 2. 13. 16:49C, C++ 로 만들어진 DLL 들을 로드 할때 자료형을 맞추는 일은 처음 하시는 분에게는 까다로운 일이 아닐겁니다.
제 경험상 까다로운 몇몇의 자료형 들에 대해서 예를 들어 보겠습니다.
HWND >> int
( 이 인트값은 C# 에서 구해진 IntPtr의 .ToInt32() 변환값으로 채워질 것입니다)
WChar * >> [MarshalAs(UnmanagedType.LPWStr)]String
( 이는 C# 에서 문자열로 채워질 것입니다)
Marshal 이라는 것 상당히 흥미로운데요..
간단히 알아본봐 Managed & Unmanaged Code 사이의 데이터 타입을 정렬하다..? 라는 군요..
실제로 Marshal 이라는 클래스를 보면 .C++에서 사용되는 자료형들(대표적으로 포인터) 등을
C# 에서도 사용가능하도록 자료형을 맞춰주는 군요...
간단히 몇가지 함수를 보면.. 파라미터는 MSDN 참고 해주시고..
Marshal.PtrToStructure(...) >> 파라미터러 넘어온 포인터를 구조체 객체로 바꿔주죠...
Marshal.PtrToStringUni(...) >> 파라미터로 넘어온 포인터를 유니코드 스트링으로 바꿔줍니다.
제 경험상 까다로운 몇몇의 자료형 들에 대해서 예를 들어 보겠습니다.
HWND >> int
( 이 인트값은 C# 에서 구해진 IntPtr의 .ToInt32() 변환값으로 채워질 것입니다)
WChar * >> [MarshalAs(UnmanagedType.LPWStr)]String
( 이는 C# 에서 문자열로 채워질 것입니다)
Marshal 이라는 것 상당히 흥미로운데요..
간단히 알아본봐 Managed & Unmanaged Code 사이의 데이터 타입을 정렬하다..? 라는 군요..
실제로 Marshal 이라는 클래스를 보면 .C++에서 사용되는 자료형들(대표적으로 포인터) 등을
C# 에서도 사용가능하도록 자료형을 맞춰주는 군요...
간단히 몇가지 함수를 보면.. 파라미터는 MSDN 참고 해주시고..
Marshal.PtrToStructure(...) >> 파라미터러 넘어온 포인터를 구조체 객체로 바꿔주죠...
Marshal.PtrToStringUni(...) >> 파라미터로 넘어온 포인터를 유니코드 스트링으로 바꿔줍니다.
'Program > C#' 카테고리의 다른 글
FileSystemWatcher 폴더내 파일 변화 감시 (0) | 2008.02.29 |
---|---|
메세지 관련.. (0) | 2008.02.13 |
UnSafe 컴파일 옵션.. (0) | 2008.02.13 |