こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

解決済みの質問

実行時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!!がでません。
どうしたらいいのでしょうか?

投稿日時 - 2003-08-16 04:07:02

QNo.629023

暇なときに回答ください

質問者が選んだベストアンサー

おそらく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++で同じように宣言できます。

# どこでエラーになるかくらいは自力で見つけましょう

投稿日時 - 2003-08-16 14:50:04

お礼

ありがとうございます。

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

とすれば通りました。

投稿日時 - 2003-08-16 20:51:46

ANo.2

このQ&Aは役に立ちましたか?

0人が「このQ&Aが役に立った」と投票しています

回答(2)

ANo.1

DLL側
1.C++で作るなら、extern "C"を忘れずに。
2.外部エクスポート宣言はどこ?

http://www.borland.co.jp/qanda/cbuilder/c0003194.html



呼び出し側
1.mydll.dllとしか記述していませんが、PATHがとおってるディレクトリまたは、呼び出しもとのEXEと同じ場所にDLLがありますか?

2.LoadLibraryとGetProcAddress、どちらで失敗してますか?戻り値を確認してください。

投稿日時 - 2003-08-16 11:38:30

お礼

ありがとうございます。

1
すべて同じディレクトリです。
コンパイルエラーや実行エラーはすべて解決しています。


LoadLibraryは通りGetProcAddressでoutです。

投稿日時 - 2003-08-16 20:48:19

あなたにオススメの質問