답변 감사합니다.
그러면 콜백함수 말고 MFC DLL에서 LPVOID형을
델파이에성 어떻게 써야 하나요?
MFC에서 작성한 DLL 함수는
extern "C" __declspec(dllexport) BOOL ExecuteTest3(LPVOID lpCallbackFunc);
이런 식으로 사용했는데요..
델파이에선 어떻게 선언해야 되져??
MFC에선 명시적으로
BOOL (*g_fnExecuteTest3)(LPVOID);
HINSTANCE hDLL;
hDLL = LoadLibrary("test3.dll");
g_fnExecuteTest3 = (BOOL(*)(LPVOID))GetProcAddress(hDLL, "ExecuteTest3");
이런식으로 사용했는데..
델파이는 어떻게 해야 하나요?
Lyn 님이 쓰신 글 :
: 상관 없어요.
:
: 양쪽의 형태만 맞춘다면
:
: 주성환 님이 쓰신 글 :
: : cdecl 가 아니라 stdcall을 써도 되나여??
: :
: : function CallbackFunc(index:integer): Boolean; stdcall;
: : 이렇게 썼더니 인덱스값이 이상하게 나오네요..
: :
: :
: :
: : 정재만 님이 쓰신 글 :
: : : procedure CallbackFunc(index:integer); cdecl;
: : :
: : : 하심이~
: : :
: : : 주성환 님이 쓰신 글 :
: : : : 안녕하세요..
: : : : 죄송하지만 델파이를 전혀 모르는 저로서는 해결 방법이 없어 이렇게 글을 올립니다.
: : : : 시급한 문제라..^^
: : : :
: : : : VC2008을 이용하여 DLL을 만들었습니다.
: : : : DLL을 3가지 사용하는데
: : : : test1.dll, test2.dll, test3.dll 이렇게 3개를 만들고
: : : :
: : : : 종속성은 test1.dll이 test2.dll을 종속하고 test2.dll은 test3.dll을 종속하여
: : : : 사용자가 test3.dll의 함수만 사용하면 되는데요..
: : : :
: : : : test3.dll에서 사용자 정의 콜백함수를 사용하기 위해 다음과 같이 선언했습니다.
: : : :
: : : : extern "C" __declspec(dllexport) BOOL ExecuteTest3(LPVOID lpCallbackFunc);
: : : :
: : : : -> LPVOID lpCallbackFunc에는 응용에서 사용할 콜백 함수
: : : : void CallBack(int nIndex) 형식의 함수를 넘겨주면 됩니다.
: : : :
: : : : test1.dll내부에 있는 쓰레드에서 콜백함수에 0~99까지의 인덱스를 순차적으로 넘겨주면 되는 테스트 프로그램인데
: : : : MFC에서 응용프로그램을 만들어서 테스트한 결과 0~99까지 순차적으로 인덱스를 받아옵니다.
: : : :
: : : : 하지만 델파이로 테스트한 결과 access violence가 발생합니다.
: : : :
: : : : 델파이로 응용프로그램을 만들때 어떻게 콜백함수를 만들어 VC++에서 만든 DLL에 삽입하는지
: : : :
: : : : 부탁드립니다.
: : : :
: : : : 테스트용 dll 파일을 첨부합니다.
|