프로그래밍
C#에서 C++ 연동하기 (dll) 사용
건우아빠유리남편
2010. 1. 22. 10:10
반응형
C#에서 DLL을 Access하기 위해 P/Invoke라는것을 이용한다.
1. DLL을 만든다. / C++
-> DLL 이름을 Iocp.dll로 정의한다.
int _declspec(dllexport) Iocp(int a)
{
}
2. DLL holder class를 만든다. 그리고 함수를 선언한다. / C#
->
class Holer
{
[DllImport!("Iocp.dll")]
public export static int Iocp(int);
}
3. Call 한다.
->
Holder.Iocp(10);
이렇게 기본적으로 하는것인데.. Callback함수나 Array는 어떻게 전달 될까라는 점이다.
Callback 함수 전달법을 보면은
(1) Callback 함수 원형을 정의한다. (in DLL)
// __stdcall을 안하면 뻑난다. 대부분 CALLBACK이나 WINAPI로 재정의 되어있다.
typedef BOOL __stdcall Callback(int a, int b);
(2) Callback 함수를 등록하는 루틴을 만든다. (in DLL)
Callback *_cb;
void RegCallback(PVOID *pcb)
{
_cb = pcb;
}
(3) Callback 함수를 호출하는 루틴을 만든다. (in DLL)
if(_cb != NULL)
{
(_cb)(10);
}
(4) DLL holder class를 만든다. 그리고 함수를 선언한다. (in C#)
class Holder
{
[DllImport("Iocp.dll")]
public export static int RegCallback(Callback cb);
}
(5) 실제 수행할 Callback 함수 Body를 만든다. (in C#)
unit CBIopc(int a, int b)
{
.....
}
(6) Call 한다. (in C#)
Holder.RegCallback(new Callback(CBIocp));
Array는 그냥 array[]를 넘기면 된다.
참고로 C++ 함수에 인자로 boo을 쓰면 C#에서 깨지는것 처럼 보인다.
반응형