VC에서 작성한 DLL에는 다음과 같은 함수가 export되어 있고
extern "C" __declspec(dllexport) void __stdcall DLLInit(void (*pCallback)(int result))
{
pCallback(10);
}
다음과 같이 VB에서 콜백함수의 주소를 넘긴다.
DLLInit AddressOf MyCallback
그러나 VB에서의 함수는 __stdcall 호출규약을 따르는데 위와 같이 인자를 선언하면 VC에서는
기본으로 __cdecl 호출규약을 따르는 함수로 판단하므로 런타임시 에러가 발생한다.
따라서 다음과 같이 수정하면 해결된다.
extern "C" __declspec(dllexport) void __stdcall DLLInit(void (__stdcall *pCallback)(int result))
{
pCallback(10);
}