2009-08-06 6 views
5

Visual Basic 6プロジェクトに少し問題があります。 IDEの ではすべて正常に動作しますが、アプリケーションを実行するたびに実行ファイルがクラッシュします。アプリケーションはコールバックを使用してC++ dllと通信します。コールバックの開始時にメッセージボックスを表示するなどの単純なコードでも失敗します。Vb6アプリケーションはIDEで動作しますが、実行ファイルがクラッシュします

コンパイルモードをP-Codeに変更しても、問題は解決しません。

助けていただければ幸いです。

はすべて

+0

...助け、それがクラッシュしたときに表示されるエラーメッセージですか? – MarkJ

+0

いいえ、それはちょうど近い –

答えて

3

これは、アプリケーションが実行しているスレッドとは別のスレッドでコールバックが発生しているようです。 [編集:私がジムがすでに提案しているのが分かるように。]その場合は、OLEに関連するものを「タッチ」するか、ランタイムを呼び出すとすぐにkaboomと同じようにします。マルチメディアタイマーのコールバックと同じ話ですが、これが当てはまる場合と同じ予防策を講じなければならないと思います。

さまざまなスレッドコールバックの短い話は、typelibで宣言されたPostMessageを使用して自分自身にメッセージを投稿する必要があるため、ErrオブジェクトがVBで設定されていないことを確認してからコールバックを戻します。あなたは、投稿されたメッセージの受信時に独自の処理を行います。ここで私はCCRPタイマーライブラリーで、このために使用されますタイプライブラリ:

http://vb.mvps.org/tools/files/postmessage.zip

希望

+0

Karlさん、ありがとうございました。ごめんなさい申し訳ありませんが、これは初めての視覚的な基本6プロジェクトです。 どのようにtlbファイルを使用するのですか?VB IDEで参照を追加しようとしましたが動作しません。構造体またはクラス型をpostMethodに渡すことはできますか? –

0

はIDEと同じ場所から実行されているコードですありがとう!おそらくそれは参照の問題であり、DLLを再登録する必要があります。

デプロイメントパッケージはすべてのものがインストールされていることを確認する必要があります。

+0

ええ同じ場所です、実際に同じDLLの他の呼び出しはちょうど良い仕事 –

+0

あなたは遅くとも早いバインディングですか?また、以下のコメントも同様です。クラッシュ/オブジェクトの呼び出しを引き起こすコードのセグメントを投稿するといいでしょう。 – RiddlerDev

1

誰が誰に電話をかけていますか?ちょっとしたコードを見せてください。

IDEは実際の問題を隠すことができるので、そこで実行できるだけで、あなたがやっていることがサポートされているという保証はありません。

VB6のランタイムはスレッドセーフではないため、別のスレッドがVBコードを呼び出している場合は、実行時のようなアクセス文字列やオブジェクトを呼び出すことはできません。

これらの問題のいくつかを回避する方法はありますが、もっと先に知る必要があると思います。

0

いくつかの質問:

  1. は、それが開発されたのと同じPC上で実行可能、または異なるものですか?
  2. ファイルでマニフェストファイルが使用されていますか?もしそうなら、mainfestはXPテーマを呼び出しますか?
  3. また、マニフェストを使用している場合は、OCXファイル用にSXSを使用していますか?
関連する問題