ページ 11

デバッグモードとexe実行で動作が違うんですが...

Posted: 2006年7月05日(水) 22:18
by Anti MS
abを初めて5日目の初心者です。ハンドルやら構造体やらまるっきり理解できていないで質問させていただきます。(^^;)
下記の様に見よう見まねでコーディングしましたが、exeを実行するとエラーとなります(CreateProcessで0が帰ってきてしまいます)。ご迷惑をおかけしますが、よろしくお願い致します。m(_ _)m
---------------------------------------
Sub MainWnd_Destroy()
AutoFax2_DestroyObjects()
PostQuitMessage(0)
End Sub
Dim CmdLine As String
CmdLine = "explorer.exe d:\systemtool"
Dim si As STARTUPINFO
Dim pi As PROCESS_INFORMATION
dim retval as dword
retval=CreateProcess(0, StrPtr(CmdLine), ByVal 0, ByVal 0, FALSE,DETACHED_PROCESS, 0, 0, si, pi)
MessageBox(0, "retval="+Str$(retval)+"です。", "CreateProcess関数のテスト", MB_OK)
CloseHandle(pi.hProcess)
CloseHandle(pi.hThread)
---------------------------------------------

Posted: 2006年7月06日(木) 07:51
by konisi
MainWnd_Destroy関数を抜けた下の部分はいつ実行されるのでしょうか?

MainWnd_Create関数内でSetTimer関数でサブ関数を呼び出し、サブ関数内でKilltimer関数を使ってからCreateProcess関数を使ってみてはどうでしょう?(下のコードは例です。試してません^^;)

コード: 全て選択


Sub MainWnd_Create(ByRef CreateStruct As CREATESTRUCT)
    SetTimer(hMainWnd,1,1,AddressOf(A) As DWord)
End Sub

Sub A()
    KillTimer(hMainWnd,1)

Dim CmdLine As String
CmdLine = "explorer.exe d:\systemtool"
Dim si As STARTUPINFO
Dim pi As PROCESS_INFORMATION
dim retval as dword
    retval=CreateProcess(0, StrPtr(CmdLine), ByVal 0, ByVal 0, FALSE,DETACHED_PROCESS, 0, 0, si, pi)
    MessageBox(0, "retval="+Str$(retval)+"です。", "CreateProcess関数のテスト", MB_OK) 
    CloseHandle(pi.hProcess)
    CloseHandle(pi.hThread)
End Sub

デバッグモードとexe実行で動作が違うんですが...

Posted: 2006年7月06日(木) 21:22
by Anti MS
konisiさん
サポートありがとうございました。下まんまで完璧でした。
今日中に(後3時間もありませんが)何とか理解できるようリキを入れたいと思います。
感謝感激です。ありがとうございました。 m<(_ _)m

> MainWnd_Destroy関数を抜けた下の部分はいつ実行されるのでしょうか?
>
> MainWnd_Create関数内でSetTimer関数でサブ関数を呼び出し、サブ関数内でKilltimer関数を使ってからCreateProcess関数を使ってみてはどうでしょう?(下のコードは例です。試してません^^;)
>
>

コード: 全て選択

> Sub MainWnd_Create(ByRef CreateStruct As CREATESTRUCT)
>     SetTimer(hMainWnd,1,1,AddressOf(A) As DWord)
> End Sub
> 
> Sub A()
>     KillTimer(hMainWnd,1)
> 
> Dim CmdLine As String
> CmdLine = "explorer.exe d:\systemtool"
> Dim si As STARTUPINFO
> Dim pi As PROCESS_INFORMATION
> dim retval as dword
>     retval=CreateProcess(0, StrPtr(CmdLine), ByVal 0, ByVal 0, FALSE,DETACHED_PROCESS, 0, 0, si, pi)
>     MessageBox(0, "retval="+Str$(retval)+"です。", "CreateProcess関数のテスト", MB_OK) 
>     CloseHandle(pi.hProcess)
>     CloseHandle(pi.hThread)
> End Sub