4

VS 2005 アプリを使用して、管理されていない (Fortran) DLL とのインターフェイスをとっています。コンパイル済みの実行可能ファイルをコマンド ラインから直接実行すると、すべて問題なく実行されます。DLL にアクセスでき、DLL 内の関数を操作できます。

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

誰かがこの動作を経験したことがありますか、またはなぜこれが起こっているのか知っていますか? vshost32経由ではなく、スタンドアロンで起動すると正常に動作する理由がわかりません。

(最後の注意: .local ファイルを使用して、登録済みの dll を強制的に cwd から使用するようにしていますが、この特定の dll は登録されていません。役立つ場合に備えて、ここにメモしておきます。)


どうもありがとう、

マイク

4

5 に答える 5

22

vshost32.exe のクラッシュに問題がありましたが、チェックボックスをオンにすると問題はなくなりました。

Properties -> Debug -> Enable unmanaged code debugging

それはあなたのために働きますか?

編集:最近のバージョンでは、オプションは次のように呼ばれます: Enable native code debugging(thanks Qwerty01)

編集: VS2008(@Deacon Frost)、VS2010(@Alxandr)でも役立つようです。

于 2009-07-25T21:02:36.717 に答える
1

未処理の例外がある可能性があります。次のコードを追加して、キャッチされていないすべての例外を処理することを試みることができます。

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();  
    }
}

根本的な問題の理由は、デバッグ時に別の作業フォルダーがあり、ネイティブ ライブラリが見つからない可能性があるためです。

于 2009-04-09T20:03:10.387 に答える
1

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

于 2010-11-15T02:06:46.400 に答える
1

確かではありませんが、[プロパティ] -> [デバッグ] からビジュアル スタジオのホスティング プロセスの使用を無効にできます。

于 2009-04-09T20:02:03.463 に答える
0

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

于 2009-04-29T00:22:22.447 に答える