반응형
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#에서 깨지는것 처럼 보인다.
반응형
'프로그래밍' 카테고리의 다른 글
영상처리 용어 해설 (0) | 2010.01.26 |
---|---|
C++ dll과 C# 연동에 관한 기초예제 (0) | 2010.01.22 |
cpu 사용률 구하는 방법에 대한 다양한 견해 (0) | 2009.12.24 |
디자인 패턴 정리 (0) | 2009.12.11 |
phpschool 방명록강좌 - 전체 소스 (0) | 2009.12.06 |
댓글