2009-04-09 37 views
4

アンマネージド(Fortran)DLLとのインターフェイスにVS 2005アプリケーションを使用しています。コンパイルされた実行ファイルをコマンドラインから直接実行すると、すべてがうまくいきます。つまり、DLLにアクセスすることができ、DLL内の関数で作業することができます。アンマネージドDLLを呼び出すとvshost32.exeがクラッシュする

残念ながら、私がVS 2005からアプリを起動すると、「vshost32.exeが動作を停止しました」というメッセージが表示され、有用なデバッグ情報が表示されません。

これは誰でも経験したことがありますか?私はスタンドアロンで起動するとうまく動作するが、vshost32では動作しないのはなぜ分かりません。

(最後の一つのノート:。。私はCWDから使用する登録済みのDLLを強制するの.localファイルを使用していますが、この特定のDLLが登録されていない、私はちょうどそれが助け場合にはそれをここに注目しています)


おかげで非常に多く、

マイク

+1

これを今までに把握しましたか?私は同じ問題を抱えています:( –

+0

悲しいことに、いいえ。私は、呼び出し規約を変更してからFortranの周りにCラッパーを記述し、それをラップすることに全力を尽くしました!* Sigh *あなたには幸運があります。結果、以下の回答を残してください!Thx :) – Mike

+0

私は同じ問題を抱えています。あなたはそれに対して何か解決策や回避策を見つけましたか? – Andrei

答えて

1

わからないが、あなたは、プロパティからのVisual Studioホスティングプロセスの使用を無効にすることができます - ということは、>デバッグ

+0

驚くべきことに、効果はありませんでした。同じようにクラッシュします。この設定がどんなに正確な効果を持っているか知っていますか?私はvshostがまだ使われていると思うが、 .vshost.exeは使われていない。 – Mike

+1

助けてくれてありがとう - まだクラッシュしていますが、デバッグの助けに感謝します! – Mike

1

である場合があります未処理の例外があります。あなたはすべてのuncatched例外を処理するには、次のコードを追加しようとすることができます:

static void Main() 
{ 
    // Add a handler for the UnhandledExceptionEvent 
    AppDomain.CurrentDomain.UnhandledException += 
    new UnhandledExceptionEventHandler(CurrentDomain_UnhandledException); 

    Application.EnableVisualStyles(); 
    Application.SetCompatibleTextRenderingDefault(false); 
    Application.Run(new Form1()); 
} 

static void CurrentDomain_UnhandledException 
    (object sender, UnhandledExceptionEventArgs e) 
{ 
    try 
    { 
     Exception ex = (Exception)e.ExceptionObject; 

     MessageBox.Show(ex.ToString(), "Error", 
       MessageBoxButtons.OK, MessageBoxIcon.Stop); 
    } 
    finally 
    { 
     Application.Exit(); 
    } 
} 

根本的な問題の理由は、あなたのネイティブライブラリが見つからないようにデバッグするときに別の作業フォルダを持っているかもしれないということです。

+0

残念ながら、未処理の例外は検出されませんでした。また、私は、管理されていないDLLへの呼び出しの前に、コードで明示的にcwdを設定しています。まだうんざり!ヘルプthoをありがとう。 – Mike

+0

作業フォルダを変更する前に、外部DLLが既に解決されていることを前提としています。この解決策が発生したときに私はドキュメントを見つけることができませんでしたが、アセンブリがジッタされた時点である可能性がありますか? –

+1

さて、本当に奇妙なことは、私がアンマネージDLL内の関数のうちのほんの一部を呼び出すことができるということです。エルク! – Mike

0

ダウンロードdependency walker http://www.dependencywalker.com/ これを使用してDLLを開き、そのフォルダに存在しない他のDLLに依存しているかどうかを確認します。

Properties -> Debug -> Enable unmanaged code debugging

それはあなたのために動作します:

+0

thx!残念ながら、それはコマンドラインからうまく動作するので、私は依存性の問題を除外することができます - ちょうど.vshostの使用に関する何かがあります。実行可能ファイルはどこかで混乱しています。 *一口*! – Mike

22

私はvshost32.exe問題のクラッシュの問題を持っていたが、私はチェックボックスをチェックしたときに消えましたか?

EDIT:オプションが呼び出され、より最近のバージョンではEnable native code debugging(感謝Qwerty01)

EDIT:それはまた、VS2008(@Deaconフロスト)、VS2010(@Alxandr)に役立つように思わ

+0

これは私のvshost32.exeのクラッシュ問題を修正しました。 – Dave

+0

私のために働いた。 – wangburger

+0

恐ろしい修正、ありがとう! – Nate

1

私はVisual C#2010 Expressを使用しています。 Project - > Propertiesに移動してvshost32のクラッシュを止めることができました。私はデバッグタブをクリックし、 "Visual Studioホスティングプロセスを有効にする"チェックボックスをオフにしました。

関連する問題