- ベストアンサー
実行時dllを動かしたい
のですがサイトで見つけたdllの作り方を見て 大人気の無償Borland C++5.51を使って //mydll.cpp #include <windows.h> BOOL __stdcall MyBeep() { return MessageBeep(0); } int __stdcall MyMessageBox(LPCTSTR lpszMessage) { return MessageBox(NULL,lpszMessage,"",0); } を bcc32 -WD mydll してmydll.dllを作り //myexe.cpp #include <windows.h> typedef int (__stdcall *pMyFunction)(LPCTSTR); int APIENTRY WinMain(HINSTANCE,HINSTANCE,LPSTR,int) { HINSTANCE hLib; pMyFunction pMyMessageBox; hLib = LoadLibrary("mydll.dll"); if(hLib) { pMyMessageBox=(pMyFunction)GetProcAddress(hLib,"MyMessageBox"); if(pMyMessageBox)(*pMyMessageBox)("HELLO!!"); FreeLibrary(hLib); } return 0; } を bcc32 -W myexe してmyexe.exeを作り myexe.exe したのですがHELLO!!がでません。 どうしたらいいのでしょうか?
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
おそらくmydll.cppの方で extern "C" __declspec(dllexport) int __stdcall MyMessageBox(LPCTSTR lpszMessage) {... のようにすれば表示されると思います。また、 #ifdef __cplusplus #define DLL_EXPORT extern "C" __declspec(dllexport) #else #define DLL_EXPORT __declspec(dllexport) #endif のようなマクロを使うとCとC++で同じように宣言できます。 # どこでエラーになるかくらいは自力で見つけましょう
その他の回答 (1)
- taka_tetsu
- ベストアンサー率65% (1020/1553)
DLL側 1.C++で作るなら、extern "C"を忘れずに。 2.外部エクスポート宣言はどこ? http://www.borland.co.jp/qanda/cbuilder/c0003194.html 呼び出し側 1.mydll.dllとしか記述していませんが、PATHがとおってるディレクトリまたは、呼び出しもとのEXEと同じ場所にDLLがありますか? 2.LoadLibraryとGetProcAddress、どちらで失敗してますか?戻り値を確認してください。
お礼
ありがとうございます。 1 すべて同じディレクトリです。 コンパイルエラーや実行エラーはすべて解決しています。 2 LoadLibraryは通りGetProcAddressでoutです。
お礼
ありがとうございます。 #include <windows.h> extern "C" __declspec(dllexport) BOOL __stdcall MyBeep() { return MessageBeep(0); } extern "C" __declspec(dllexport) int __stdcall MyMessageBox(LPCTSTR lpszMessage) { return MessageBox(NULL,lpszMessage,"",0); } とすれば通りました。