みんなの「教えて(疑問・質問)」にみんなで「答える」Q&Aコミュニティ

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

解決済みの質問

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 ファイルがみつかりません」と表示されます。「参照の追加」から参照しようとしても「このファイルは参照できません。」をエラーがでてしまいます。

直すべき点はどの部分なのでしょうか?
ご教示ねがいます。

投稿日時 - 2008-06-22 23:25:07

QNo.4121710

すぐに回答ほしいです

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

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などで 変更していませんか

投稿日時 - 2008-06-23 02:29:26

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

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

回答(2)

ANo.1

作成なさったDLLはどこにありますか?

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

投稿日時 - 2008-06-22 23:33:04

補足

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

投稿日時 - 2008-06-22 23:59:30

あなたにオススメの質問