2012-03-21 10 views
0

C#で.netのcurrentProcess.MainModuleに相当するC++は何ですか?

// get the current process 
Process currentProcess = System.Diagnostics.Process.GetCurrentProcess(); 

をこれを行うとき、私は

currentProcess.MainModule 

を行うことができますは、C++での任意の同様の機能はありますか?

+0

に同様の結果を得ることができる必要がありGetCurrentProcessIdEnumProcessModules機能を使って、あなたが必要なものについての詳細を提供することはできますか?実行中のコードの場所、またはプロセスを開始したメインの.exeの場所を取得しますか? –

答えて

0

それは言う:GetCurrentProcessId functionにreferes

[DllImport("kernel32.dll", CharSet = CharSet.Auto)] 
public static extern int GetCurrentProcessId(); 

として宣言されているNativeMethods.GetCurrentProcessId()

public static Process GetCurrentProcess() 
{ 
    return new Process(".", false, NativeMethods.GetCurrentProcessId(), null); 
} 

を。

MainModuleが順番にEnumProcessModules native functionに降りているようだ

public ProcessModule MainModule 
{ 
    get 
    { 
     if (this.OperatingSystem.Platform == PlatformID.Win32NT) 
     { 
      this.EnsureState((Process.State)3); 
      ModuleInfo firstModuleInfo = 
       NtProcessManager.GetFirstModuleInfo(this.processId); 
      return new ProcessModule(firstModuleInfo); 
     } 
     ProcessModuleCollection processModuleCollection = this.Modules; 
     this.EnsureState(Process.State.HaveProcessInfo); 
     foreach (ProcessModule processModule in processModuleCollection) 
     { 
      if (processModule.moduleInfo.Id == this.processInfo.mainModuleId) 
      { 
       return processModule; 
      } 
     } 
     return null; 
    } 
} 

として定義されます。

だから、両方のあなたは

currentProcess.MainModule 
+0

私はこれを取得しません。 EnumProcessModulesを呼び出して、モジュールハンドルを列挙し、 'GetModuleHandle(NULL) 'に等しいモジュールハンドルを見て、それを返すまで待ち​​ます。実際に? –

+0

@DavidHeffernan申し訳ありませんが、私の答えは複雑すぎました。 MFCのやり方では、記述したのと同じことをしました(いくつかの 'Afx'という接頭辞、IIRC)。私はあなたが言ったように(不完全な、あなたが言ったように).NET Frameworkを通じた道筋を描いたところです。 –

+1

.net libsはモジュールハンドルの周りにラッパークラスを維持しています。 1行のバージョンが存在するにもかかわらず、あなたの答えが受け入れられたというあなたのせいではありません!私は、些細な解決策が存在することを尋ねる者に理解してもらいたい。 –

4

私はあなたがWindowsを指していると仮定しています。その場合は、次のようにする必要があります。

GetModuleHandle(NULL); 

これは、プロセスの作成に使用されたモジュールのモジュールハンドルを返します。詳細については、GetModuleHandleのドキュメントを参照してください。

モジュールハンドルではなくモジュールのファイル名を使用する場合は、代わりにGetModuleFileNameが必要です。 GetProcess()の逆コンパイルソースでILSpyてみる

関連する問題