7

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? をスローします。

4

1 に答える 1