Visual Studio 2010 には 2 つのプロジェクトを含むソリューションがあります。1 つは C# コンソール アプリケーションで、これを Foo と呼びます。もう 1 つは CLR C++ コンソール アプリケーションで、これを Bar と呼びます。Bar は dll ではなく exe です。デバッグ セッションが開始されると、Foo を実行して開始されます。Foo は、必要なコードを使用して Bar のプロセスを開始し、
System.Diagnostics.Process procBar = System.Diagnostics.Process.Start(pathToBarEXE)
その Bar.exe を現在実行中のデバッガーにプログラムでアタッチします。私はそれを行うことになっている機能を持っています(インターネット上のどこでも見られます)
public void AttachToProcess(int processId)
{
foreach (EnvDTE.Process process in DTE.Debugger.LocalProcesses)
{
if (process.ProcessID == processId)
{
process.Attach();
DTE.Debugger.CurrentProcess = process;
}
}
}
ただし、DTE はインターフェイスであるため、関数はコンパイルされません。このように機能を変更しました
public void AttachToProcess(int processId)
{
EnvDTE80.DTE2 dte2;
dte2 = (EnvDTE80.DTE2)System.Runtime.InteropServices.Marshal.GetActiveObject("VisualStudio.DTE.10.0");
foreach (EnvDTE.Process process in dte2.Debugger.LocalProcesses)
{
if (process.ProcessID == processId)
{
process.Attach();
}
}
}
コンパイルして実行しますが、Bar のプロセスを見つけると、if ステートメントが例外The message filter indicated that the application is busy. (Exception from HRESULT: 0x8001010A (RPC_E_SERVERCALL_RETRYLATER))
What am I doing wrong here? をスローします。