私が取り組んでいる AC# WPF アプリケーションには、管理されていない外部 DLL への多くの呼び出しが含まれています。アプリケーションを正常に実行している場合 (つまり、Visual Studio デバッガーの外部)、DLL へのすべての呼び出しは期待どおりに機能します。ただし、Visual Studio 2013 内からデバッグする場合、DLL 内の 1 つの特定のメソッドを呼び出すと、アプリケーションがクラッシュします。
これは私がメソッドをインポートする方法です:
[DllImport("Client.dll", CallingConvention = CallingConvention.Cdecl)]
private static extern string ClientGetVersion();
...そして、これは私がDLLメソッドを呼び出す方法です:
try
{
version = ClientGetVersion();
}
catch (Exception ex)
{
// Error handling omitted for clarity...
}
Visual Studio は、デバッグ セッション中に vshost32.exe プロセスを使用してアプリケーションをホストしているようです ( VSHOST - ホスティング プロセス)。さらに、「ホスティング プロセスが有効になっていると、特定の API の呼び出しが影響を受ける可能性があります。このような場合、正しい結果を返すには、ホスティング プロセスを無効にする必要があります。」(MSDN の記事「方法: ホスティング プロセスを無効にする」を参照してください)。以下に示すように、[プロジェクト] > [プロパティ...] > [デバッグ] で [Visual Studio ホスティング プロセスを有効にする] オプションを無効にすると、実際に問題が解決されます。
「...特定のAPIへの呼び出し...」でこの問題を具体的に引き起こす可能性のあるものは何か知っていますか?