VC で作成した DLL が VB から使用可能かを調査する.
VC で複数の宣言により DLL を作成する.
DLL void Func(LPSTR, LPSTR) という関数をエクスポート
VC++5.0
VB P-Code コンパイル
VB5.0
VCでの関数宣言方法 |
名前修飾の結果 |
VBからの呼び出し |
__declspec(dllexport)のみ |
?Func@@YAXPAD0@Z |
NG |
extern "C" + __declspec(dllexport) |
Func |
NG(実行時エラー49) |
__declspec(dllexport) + DEF |
Func |
NG(実行時エラー49) |
extern "C" + __declspec(dllexport) + DEF |
Func |
NG(実行時エラー49) |
extern "C" + __declspec(dllexport) + DEF + WINAPI |
Func |
OK |
extern "C" + __declspec(dllexport) + WINAPI |
_Func@8 |
NG |
DEF + WINAPI |
Func |
OK |
extern "C" + DEF + WINAPI |
Func |
OK |
extern "C" + DEF |
Func |
NG(実行時エラー49) |
DEF |
Func |
NG(実行時エラー49) |
※「DEF」は DEF ファイル内で EXPORTS 文の記述をしてるという意味
一番確実なのは,オーソドックスと思われる
extern "C" + DEF + WINAPI
の組み合わせである.
関数の宣言は、extern "C" 及び WINAPI を付けて,エクスポートはDEFファイルで行う.
VC++ 側は
extern "C" + dllexport + WINAPI
VB 側は
alias
という方法も可能である.
しかし,VB 以外からの使用を考えると DEF ファイルを使用した方が後々楽である.
参照
VBから呼び出すDLLの作成
VC4以降での32bit DLLの作り方
DEFファイル