実行ファイルの動作が違うのはなぜ?


けんけん  2004-12-01 16:54:13  No: 87032  IP: [192.*.*.*]

VB6.0で簡単なアプリケーションをつくり
実行ファイルを作成したのですが、
プロジェクト上でコンパイルし実行した結果と実行ファイルで実行した結果が
異なり、
プロジェクト上ではきちんと動作するのですが
実行ファイルではエラーでハングしてしまいます。
何故でしょうか?
こうういうことってありますか?
プログラムの変更はしていないし、何度もコンパイルし直し
その都度実行ファイルも作り直しています。
なお、動作環境はWindowsXPです。
どなたかご教授お願いします。

編集 削除
ねろ  2004-12-01 17:21:14  No: 87033  IP: [192.*.*.*]

時々あります。
たとえば、マルチスレッドのプログラムは、VB6では開発環境
では、正常に動作しますが、ネイティブコードコンパイルでは
ハングします。
コンパイルを「P-Code」にすれば正常に動作すると思いますが
原因が解決したわけではありません。
どのコードでハングしているか判れば対策が可能な場合もあります。

編集 削除
くま  2004-12-01 18:21:48  No: 87034  IP: [192.*.*.*]

簡単なアプリケーションといってもどんな処理をしているのか
分からないのでなんともいえませんが。

例えば初期値に依存するような処理であれば実行ファイルは同じでも
初期設定ファイルの内容が異なるために一方ではハングしてしまう
ということも考えられます。

編集 削除
くま  2004-12-01 18:24:20  No: 87035  IP: [192.*.*.*]

ああ。。質問内容を良く見たら全然見当違いな回答でした
無視してください。

編集 削除
けんけん  2004-12-02 08:43:26  No: 87036  IP: [192.*.*.*]

結構やっかいな問題なんですね・・・。
プログラムはマルチスレッドではありません。
だとすると、何か他に考えられる原因ってありますか?
このプログラムはファイル転送のプログラムなのですが、
ハングしても転送には成功しています。
となると、転送後の処理の問題??
でもプロジェクト上では問題ないんですよね・・・。
何かアドバイスがあればよろしくお願いします。

編集 削除
ねろ  2004-12-02 10:12:17  No: 87037  IP: [192.*.*.*]

>結構やっかいな問題なんですね・・・。
かなり厄介です。(^^;
>でもプロジェクト上では問題ないんですよね・・・。
プロジェクトの実行はP-Codeコンパイルに近い方法です。
怪しそうなところにログの書き出しコードを入れて、
どこまで実行できているか、探す様な手しかありません。
APIを使っているところが怪しかったりしますが、これだけの
ヒントでは、いかんせんアドバイスは難しいと思います。

編集 削除
ひろ  2004-12-02 12:42:07  No: 87038  IP: [192.*.*.*]

開発環境と実行環境で動作が違う点というと

・フォーカスの移動に関わる動作
  (表示されていないコントロールへのSetFocus等)
・イベントの発生の仕方が微妙に違う
・Winsockコントロールの挙動
・ActiveX EXEのマルチスレッド動作
・ActiveXコンポーネント呼び出しの際のコンポーネント検索順序
・DLLの検索順序
・App.EXENameの返す値(開発環境ではVBPの名前だが、実行時はEXEの名前)
・自プロセスの情報の参照結果

あたりでしょう。

EXE実行時固有の問題ということなので、ソース情報を埋め込んでコンパイルして
VC++で実行中のプロセスをデバッグするのも1つの手でしょうね。

編集 削除
Say  2004-12-02 12:46:52  No: 87039  IP: [192.*.*.*]

参考までに・・・
過去ログ

exeファイルでエラーを出ないようにするには? 
http://madia.world.coocan.jp/cgi-bin/VBBBS/wwwlng.cgi?print+200408/04080125.txt
FtpPutFileの戻り値 
http://madia.world.coocan.jp/cgi-bin/VBBBS/wwwlng.cgi?print+200410/04100037.txt

編集 削除
ひろ  2004-12-03 09:40:30  No: 87040  IP: [192.*.*.*]

他の可能性としては、こんなとこかな。
エラーの内容と発生場所ぐらい書いてもらえるともう少し回答しやすいのですが。

微妙なタイミングが要求される処理やある程度のウェイトを必要とする処理では、開発環境と実行ファイルでの速度差が原因で正常に動作しないことがあり得ます。

APIを使う処理でバッファオーバーフローや不正なメモリアクセスが発生している場合に、開発環境と実行ファイルでは実行時のメモリの使用状況が違うので開発環境では偶然正常に動作しているだけという可能性があります(Cではよくある話)。

編集 削除
けんけん  2004-12-03 13:53:31  No: 87041  IP: [192.*.*.*]

みなさんありがとうございます!!
結構むずかしいですね・・・。
みなさんの意見を参考にして
何とかがんばってみます。
ありがとうございました!!!

編集 削除