たびたびすいません。近藤と申します。
以前に、”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
全てファイルは、同一フォルダに格納してあります。
>Declare Function fncSub Lib TEST.dll ()
Declare Function fncSub Lib TEST.dll () As Long
では?
その記述は、あってもなくてもいっしょでした・・・。
>全てファイルは、同一フォルダに格納してあります。
作成したDLLも同一フォルダに居ますか?
>Sub Main()
> MsgBox (test)
>End Sub
作った関数fncSubを呼び出してないようですが・・
すべてのソースは同一フォルダに格納してあります。
>その記述は、あってもなくてもいっしょでした・・・。
いっしょではありません
>すべてのソースは同一フォルダに格納してあります。
DLLは、ソースではありません、オブジェクトです
作った関数fncSubは呼び出しているの?
>Sub Main()
→ Call fncSub
> MsgBox (test)
>End Sub
不良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 の場合
但し一瞬で消えますが。。。。。