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

ActiveBasicでのプログラミングでわからないこと、困ったことなどがあったら、ここで質問してみましょう(質問を行う場合は、過去ログやWeb上であらかじめ問題を整理するようにしましょう☆)。
返信する
メッセージ
作成者
Anti MS

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

#1 投稿記事 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)
---------------------------------------------
konisi
記事: 893
登録日時: 2005年7月25日(月) 13:27
お住まい: 埼玉県東松山市
連絡する:

#2 投稿記事 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
Website→http://web1.nazca.co.jp/himajinn13sei/top.html
ここ以外の場所では「暇人13世」というHNを主として使用。

に署名を書き換えて欲しいと言われたので暇だしやってみるテスト。
Anti MS

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

#3 投稿記事 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
返信する