본문 바로가기

Window Programming/VB

VB에서 VC callback 함수 사용

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);
}