C++で作成したDLLをVBや他言語から呼び出す時の決まり事
特に、DEFファイルを指定しないと、エクスポートされる関数名が「TestFunc」になって欲しい所が、「_TestFunc@」という用に修飾されてしまいます。 必ず指定しましょう。
#ifndef __DllMain_h__
#define __DllMain_h__
#define DllExport __declspec(dllexport)
#ifdef __cplusplus
extern "C" {
#endif
// エクスポートする関数
DllExport void WINAPI TestFunc(const char* Input, char* Output);
typedef void (*LPTESTFUNC)(const char* Input, char* Output);
#ifdef __cplusplus
}
#endif
#endif // __DllMain_h__
#include "stdafx.h"
#include "dllmain.h"
// DllMain (固定)
BOOL APIENTRY DllMain( HANDLE hModule,
DWORD ul_reason_for_call,
LPVOID lpReserved )
{
switch( ul_reason_for_call) {
case DLL_PROCESS_ATTACH:
break;
case DLL_THREAD_ATTACH:
break;
case DLL_THREAD_DETACH:
break;
case DLL_PROCESS_DETACH:
break;
}
return TRUE;
}
DllExport void WINAPI TestFunc(const char* Input, char* Output)
{
// 処理
}
(Test.dllを作成したい場合、LIBRARY指定で".dll"は必要ないようです。)
LIBRARY "Test" DESCRIPTION "DLLの説明文" EXPORTS TestFunc