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