アプリ版:「スタンプのみでお礼する」機能のリリースについて

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

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

A 回答 (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などで 変更していませんか
    • good
    • 0

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



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

この回答への補足

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

補足日時:2008/06/22 23:59
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!