VC++6.0で作成したDLLをVB6.0でDeclareを使ってコールしています。
VCでDLLを作成するときはソースに
#include "stdafx.h"
#include <stdio.h>
#include "dllmake.h"
EXTERN int __stdcall sum(int a,int b){
int n;
n=a+b;
return n;
}
ヘッダに
#define EXTERN extern "C" __declspec(dllexport)
EXTERN int __stdcall sum(int a,int b);
としています.
このDLLをVBでコールすると
実行時エラー '453':
エントリ sum が DLL ファイル dllmake.dll 内に見つかりません.
とエラーが発生します.このDLLをVC++からコールすることは可能でした.
またDLL作成時にdefファイルを作成するとVBからでもコール可能でした.
VBからコールする場合はdefファイルは必ず必要になるのでしょうか.
defファイルを使わない方法がありましたら教えて下さい.
(VC++の質問だと思うが、、、)
VC++6.0に付属しているDependency Walkerを使って、DLLの
関数を確認してみてください。
リストビューのFunctionに出てきている関数名(エクスポート名)にすれば使用可能です。
(defファイルを使わなければ、XXXX@YYYのような名前になる)
ところで、なんでdefファイルを使いたくないのでしょうか?
管理等面倒とか、量が多すぎるからという理由?(そういう理由で使わないのはどうかと。)
>ヘッダに
ちなみに、VBで使うだけであればヘッダファイルはなくても動きます。
それと
>このDLLをVC++からコールすることは可能でした.
は XXX.lib を使っているのですよね?
XXX.libを使わない、LoadLibrary & GetProcAddress のやり方では同様に
失敗するでしょう。
VC++のほうに書くべきでした.すみません.
エクスポート名で行うとVBでも使用可能でした.
ありがとうございました.
VC++からコールするときは,XXX.libを使っていました.
正確に書いてなくてすみません.
Blueさん,ありがとうございました.
ツイート | ![]() |