• ベストアンサー

VB6から参照可能なDLLの作成

VB6から参照可能なDLLの作成を参考書をみながらしましたが、上手くいかない為質問させていただきます。 開発環境VC++ 2005 C++ CTEST.dll #include <windows.h> __declspec (dllexport) int __stdcall test(int i) { i = i + 5; return i; } .defファイル LIBRARY "test" DESCRIPTION EXPORTS A 以上でDLLを作成し、VB6側で Private Declare test Lib "CTEST.dll" (ByVal i as integer) で宣言しても「エラー53 ファイルがみつかりません」と表示されます。「参照の追加」から参照しようとしても「このファイルは参照できません。」をエラーがでてしまいます。 直すべき点はどの部分なのでしょうか? ご教示ねがいます。

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

  • ベストアンサー
  • redfox63
  • ベストアンサー率71% (1325/1856)
回答No.2

DEFファイルによる リネームを実行しないのであれば __declspec (dllexport) int __stdcall test(int i) この関数の VB6での宣言は declare Function _test@4 Lib "CTEST.DLL" ( byVal n as Long) as Long となります 関数名の先頭に _ 、関数名の最後に@と 引数が何バイト使っているかの整数になります C側の宣言が int myTest( int x, int y, int w, int h ) とすると VB6側では _myTest@16 といった関数名になります DEFファイルで LIBRARY "test" DESCRIPTION EXPORTS TEST  @1 といった具合でエクスポートするなら VB6の宣言は declare Function TEST Lib "CTEST.DLL" ( byVal n as Long) as Long といった具合になります VB6のプロジェクトと同じフォルダーにDLLがあれば実行時に読み込まれますよ EXPORTS A とした場合は declare Function A Lib "CTEST.DLL" ( byVal n as Long) as Long となってしまうと思います 参照の追加 で追加できるのは ActiveX系やCOM型のDLLとなります DLLインストール時に Regsvr32ででレジストリーにDLL登録して使うものになります 本当にファイルがコピーされているか確認しましょう 関数を使う前に Dim ss As string ss = Dir("CTEST.DLL") MsgBox ss で CTEST。DLL と表示されるか確認してみましょう また 実行時の カレントフォルダーが違う可能性もありますよ ChDirやChDriveなどで 変更していませんか

その他の回答 (1)

  • bin-chan
  • ベストアンサー率33% (1403/4213)
回答No.1

作成なさったDLLはどこにありますか? VB6のプロジェクトと同じフォルダか、Windowsがsystemフォルダと認識しているフォルダ(C:\Windows\system32だったり)にありますか?

0slowlykick0
質問者

補足

ご回答ありがとうございます。 プロジェクトと同じフォルダにあります。