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 ファイルがみつかりません」と表示されます。「参照の追加」から参照しようとしても「このファイルは参照できません。」をエラーがでてしまいます。
直すべき点はどの部分なのでしょうか?
ご教示ねがいます。
No.1
- 回答日時:
作成なさったDLLはどこにありますか?
VB6のプロジェクトと同じフォルダか、Windowsがsystemフォルダと認識しているフォルダ(C:\Windows\system32だったり)にありますか?
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などで 変更していませんか
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- その他(プログラミング・Web制作) IT初心者です 仕事で、vb.netで作成されたdllをvbaで呼び出すプログラムを作成しろと言われ 1 2023/03/27 08:22
- フリーソフト cygewf-2.dllがない、と表示され、ダウンロードしたファイルが動作しない 2 2023/03/27 11:05
- Windows 10 IT初心者です! powershellで以下のようなエラーが出ました オブジェクト参照がオブジェクト 1 2023/05/17 11:30
- C言語・C++・C# Windows Formアプリからコンソールを呼び出して文字を出力させたい 8 2023/05/09 10:53
- Visual Basic(VBA) VBA アドインについて お詳しい方 ご教授をお願いします。 相談事項 現在以下の対応を実施した所、 1 2022/11/02 16:53
- C言語・C++・C# このプログラミング誰か教えてくれませんか 1 2022/06/02 15:27
- その他(プログラミング・Web制作) python OpenPyXLを使って出力結果をエクセルに書き込み 2 2022/06/04 19:46
- Visual Basic(VBA) VBAでファイル名を指定して保存するとき 4 2023/03/26 21:55
- ノートパソコン EXCEL のドキュメントの回復について 2 2023/03/19 17:16
- Microsoft ASP C#からvbsを実行したい 5 2022/11/24 17:31
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
ハンドルされていない例外が発...
-
2重定義って??
-
DWORDの実際の型は何でしょうか
-
関数の実体定義にヘッダファイ...
-
visualstudio C# テキストボッ...
-
クラスや構造体のarrayを作りた...
-
構造体の宣言でエラーが出ます。
-
long型の定数の末尾にLを付ける...
-
変数の型を定義しなかった場合...
-
VC6でlong longでエラー?
-
main.c:7:43: warning: implici...
-
分割コンパイル時に構造体....
-
【#define】 defineで定義した...
-
構造体のあるメンバを基準にソ...
-
C++のfor文について
-
CStringを含むconst構造体
-
VB 関数
-
C言語エラーの解決法教えてくだ...
-
[C++]継承したクラスのコンスト...
-
エラー「invalid conversion fr...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
DWORDの実際の型は何でしょうか
-
visualstudio C# テキストボッ...
-
2重定義って??
-
long型の定数の末尾にLを付ける...
-
C++のfor文について
-
typedef enumの使い方を教えて...
-
関数の実体定義にヘッダファイ...
-
変数の型を定義しなかった場合...
-
ハンドルされていない例外が発...
-
C++でboolにintの値を代入する...
-
main.c:7:43: warning: implici...
-
プログラムの中で別のmainを呼...
-
【#define】 defineで定義した...
-
void func( void )について
-
構造体の要素すべてに対する四...
-
構造体の宣言でエラーが出ます。
-
C++の(左辺値)参照を参照渡し
-
main()とint main(void)の違い
-
intとINTの違いは?
-
DLLでLIBファイルが作成されない
おすすめ情報