2013-05-16 3 views
7

2つのプロジェクトを含むビジュアルスタジオ2010のソリューションがあります.1つはC#コンソールアプリケーションで、これはFooと呼ばれ、もう1つはCLR C++コンソールアプリケーションですこれをBarと呼ぶことにする。バーはexeでdllではありません。デバッグセッションが開始されると、Fooを実行して起動します。 Fooはコードを使用してバーのプロセスを開始します System.Diagnostics.Process procBar = System.Diagnostics.Process.Start(pathToBarEXE) 私はそのBar.exeを現在実行中のデバッガにプログラムで実装します。 DTEがインタフェースであると、私は(インターネット上のどこにでもそれを見て)それを行うことになっている機能2番目のプロセスを.NETでプログラムでVS2010にアタッチする

public void AttachToProcess(int processId) 
    { 
     foreach (EnvDTE.Process process in DTE.Debugger.LocalProcesses) 
     { 
      if (process.ProcessID == processId) 
      { 
       process.Attach(); 
       DTE.Debugger.CurrentProcess = process; 
      } 
     } 
    } 

を持っていますが、機能はコンパイルされません。私はthusly

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

機能を変更しているし、それがコンパイルし、実行するが、それはバーのプロセスを発見したときの文が例外をスローした場合、The message filter indicated that the application is busy. (Exception from HRESULT: 0x8001010A (RPC_E_SERVERCALL_RETRYLATER))私はここで間違って何をしているのですか?

答えて

1

彼らはここに言う:

http://msdn.microsoft.com/en-us/library/ms228772.aspx

COMは、マルチスレッド・アプリケーションを扱ういくつかの問題を持っているので、それがあること。彼らはあなたがこのように拒否されたときにコールを再試行するためにIOleMessageFilterを使用するよう勧めるサンプルコードを提示しています。

関連する問題