VBのプログラムからVC++6.0で作成したDLLを呼び出す方法 – プログラミング – Home

VBのプログラムからVC++6.0で作...
 
通知
すべてクリア

VBのプログラムからVC++6.0で作成したDLLを呼び出す方法


近藤
 近藤
(@近藤)
ゲスト
結合: 22年前
投稿: 7
Topic starter  

たびたびすいません。近藤と申します。
以前に、”VC++6.0で内部コマンド(DOSコマンド:DIR)をCALLする方法”では
皆様に大変お世話になりました。

今度の質問は、VC++で作成したDLL(内部コマンドが実行する)をVB6.0から呼び出したいのです

なにも動きません。コンパイルはDLL、VB共に通っているのですが・・・・
下記にソースを載せますので、ご教授願います。

**VC++6.0ソース**
<<プログラム名:test.cpp>>

#include stdafx.h
#include test.h
#include stdlib.h
#include iostream.h

BOOL APIENTRY DllMain( HANDLE hModule,
DWORD ul_reason_for_call,
LPVOID lpReserved
)
{
switch (ul_reason_for_call)
{
case DLL_PROCESS_ATTACH:
case DLL_THREAD_ATTACH:
case DLL_THREAD_DETACH:
case DLL_PROCESS_DETACH:
break;
}
return TRUE;
}

//int system(const char *string);

TEST_API int __stdcall fncSub()
{
cout << \n DOSコマンド(Dir)実行です。\n\n\n;
system(dir);
return 0;

}

<<プログラム名:test.h>>

#ifdef TEST_EXPORTS
#define TEST_API __declspec(dllexport)
#else
#define TEST_API __declspec(dllimport)
#endif

TEST_API int __stdcall fncSub();

**VBソース**
<<プログラム:標準モジュール内に作成>>

Declare Function fncSub Lib TEST.dll ()
Sub Main()
MsgBox (test)
End Sub

**その他**
defファイルの作成(test.def)

LIBRARY TEST.DLL

EXPORTS
fncSub

全てファイルは、同一フォルダに格納してあります。


引用解決済
トピックタグ
不良PG
 不良PG
(@不良PG)
ゲスト
結合: 23年前
投稿: 80
 

>Declare Function fncSub Lib TEST.dll ()
Declare Function fncSub Lib TEST.dll () As Long

では?


返信引用
近藤
 近藤
(@近藤)
ゲスト
結合: 22年前
投稿: 7
Topic starter  

その記述は、あってもなくてもいっしょでした・・・。


返信引用
不良PG
 不良PG
(@不良PG)
ゲスト
結合: 23年前
投稿: 80
 

>全てファイルは、同一フォルダに格納してあります。
作成したDLLも同一フォルダに居ますか?

>Sub Main()
> MsgBox (test)
>End Sub

作った関数fncSubを呼び出してないようですが・・


返信引用
近藤
 近藤
(@近藤)
ゲスト
結合: 22年前
投稿: 7
Topic starter  

すべてのソースは同一フォルダに格納してあります。


返信引用
不良PG
 不良PG
(@不良PG)
ゲスト
結合: 23年前
投稿: 80
 

>その記述は、あってもなくてもいっしょでした・・・。
いっしょではありません

>すべてのソースは同一フォルダに格納してあります。
DLLは、ソースではありません、オブジェクトです

作った関数fncSubは呼び出しているの?


返信引用
不良PG
 不良PG
(@不良PG)
ゲスト
結合: 23年前
投稿: 80
 

>Sub Main()
→ Call fncSub
> MsgBox (test)
>End Sub


返信引用
yas0302
 yas0302
(@yas0302)
ゲスト
結合: 23年前
投稿: 37
 

不良PGさんの指摘されているように、環境を正しく設定してあれば、
実行はされていると思いますよ。(DOS窓の中で。)
一瞬で消えてしまうのでわからないのではないでしょうか。

ためしに、DLLのソースを以下のように変更してください。

TEST_API int __stdcall fncSub()
{
cout << \n DOSコマンド(Dir)実行です。\n\n\n;
// system(dir);
system(dirtest.bat); // <===============
return 0;
}

そして、DLLがあるフォルダと同じフォルダに
dirtest.bat として以下の内容のファイルを作成してみてください。

dir
pause

ファイル一覧が表示されたあとに、

続行するには何かキーを押してください . . .

と表示されると思います。

でも、なぜ直接VBからコマンドを呼び出さないのでしょうか?
DLLを作成して呼び出すまでもないと思いますが。
ちなみに、VBからは、Shell で起動できます。

dir などは、そのままでは実行できないので
shell cmd /c dir,1 <=== WinNT / 2K / XP の場合
但し一瞬で消えますが。。。。。


返信引用

返信する

投稿者名

投稿者メールアドレス

タイトル *

プレビュー 0リビジョン 保存しました
共有:
タイトルとURLをコピーしました