defファイルを使わないDLLを作るには

解決


nao  2006-12-18 04:57:57  No: 97439

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ファイルを使わない方法がありましたら教えて下さい.


Blue  2006-12-18 10:31:00  No: 97440

(VC++の質問だと思うが、、、)

VC++6.0に付属しているDependency Walkerを使って、DLLの
関数を確認してみてください。

リストビューのFunctionに出てきている関数名(エクスポート名)にすれば使用可能です。
(defファイルを使わなければ、XXXX@YYYのような名前になる)

ところで、なんでdefファイルを使いたくないのでしょうか?
管理等面倒とか、量が多すぎるからという理由?(そういう理由で使わないのはどうかと。)


Blue  2006-12-18 10:42:24  No: 97441

>ヘッダに
ちなみに、VBで使うだけであればヘッダファイルはなくても動きます。

それと
>このDLLをVC++からコールすることは可能でした.
は XXX.lib を使っているのですよね?
XXX.libを使わない、LoadLibrary & GetProcAddress のやり方では同様に
失敗するでしょう。


nao  2006-12-19 23:29:33  No: 97442

VC++のほうに書くべきでした.すみません.
エクスポート名で行うとVBでも使用可能でした.
ありがとうございました.

VC++からコールするときは,XXX.libを使っていました.
正確に書いてなくてすみません.
Blueさん,ありがとうございました.


※返信する前に利用規約をご確認ください。

※Google reCAPTCHA認証からCloudflare Turnstile認証へ変更しました。






  このエントリーをはてなブックマークに追加