.NET コードが dllimport を介してアンマネージ dll の関数を呼び出した後に何が起こっているかをデバッグする方法はありますか?
dllimport を介してアンマネージド内の dll 関数を公開します。コードをステップ実行する際に関数を呼び出すと、何かが発生し、戻りません。
おそらくデバッグビューや情報を取得するために何かできることはありますか? それとも私はSOLですか?
まず、プロジェクトのプロパティの [デバッグ] タブでネイティブ コードのデバッグが有効になっていることを確認してください。
呼び出し先の DLL のソース コードがある場合は、マネージ コードと同じようにネイティブ DLL にステップ インできるようにセットアップできるはずです。これを行う最も簡単な方法は、ネイティブ DLL のソース コードを同じソリューションに追加し、そのプロジェクトの出力にリンクすることです。C# アプリケーションの実行中に、Visual Studio がネイティブ DLL とその DLL の pdb の両方にアクセスできることを確認する必要があります。
DLL のソース コードがない場合は、ネイティブ メソッドの呼び出しの直前にブレークポイントを設定することをお勧めします。次に、プログラムを続行し、1 ~ 2 秒後にプログラムを手動で一時停止します。ネイティブ DLL を呼び出したのと同じスレッドを見ていることを確認してから、コール スタック ビューアーを確認します。「[外部コード]」という行が表示された場合は、コンテキスト メニューで「外部コードを表示」がオンになっていることを確認してください。それがチェックされると、コールスタックは現在実行中のメソッドを通知できる場合があります。テキストは灰色になり、メソッドが外部 DLL にあることを示します。Windows メソッド呼び出しを行っている場合は、最初に Windows シンボル ファイルをインストールすると、デバッガーから詳細情報が得られる場合があります ( http://www.microsoft.)。デバッガーを数回一時停止して続行し、実行のさまざまなポイントでコール スタックがどのように見えるかを確認することもできます。この情報から、何が問題なのかを把握できる場合があります。
また、できるだけ単純なケースから始めて、さまざまな引数を渡してみて、同じ動作が得られるかどうかを確認してください。最後に、すべてのマーシャリング メタデータが正しいことを確認してください。