2012-04-17 15 views
0

私はC#アプリケーションを作成しました。このアプリケーションでは、別のプロジェクトのC++ APIを使用/実行したいと考えています(APIはマクロコーディングで記​​述されています)。私はそのC++プロジェクトのdllをインポートしようとし、そのAPIに属する関数を呼び出そうとしました。問題は「メソッドが見つかりません」というエラーがスローされることです。C++ dllを別のC#プロジェクトにインポートして使用する/実行する方法は?

C#プロジェクトでC++プロジェクトを実行するにはどうすればよいですか?

+0

http://msdn.microsoft.com/en-us/library/aa288468(v=vs.71).aspx – svinja

+1

[C#でのC#APIの使用]の可能な複製(http://stackoverflow.com/questions)/1689957/using-c-api-in-c-sharp)と多分多かった(これはちょうど "関連"の質問リストに表示された) –

答えて

2

あなたが管理するプロジェクトへの参照としてネイティブDLLを追加することはできません。主なオプションは3つあります。

  1. p/invokeでネイティブ関数を使用できるようにします。
  2. COMを介してネイティブコードを公開します。
  3. ネイティブコードを管理対象のC++アセンブリとしてコンパイルします。

深刻なコードの場合、オプション3は最も生産的かつ効果的なアプローチです。

1

"実行中" で、あなたは別のプロセスを意味する場合:あなたはあなたができる、C++で開発されたDLLを使用して意味ならば、そうで

myProcess.StartInfo.FileName = "notepad.exe"; 
myProcess.StartInfo.CreateNoWindow = false; 
myProcess.Start(); 

をクラス.NETで利用できるSystem.Diagnostics.Processを使用しますPlatform Invoke Servicesを使用します。

using System; 
using System.Runtime.InteropServices; 

class PlatformInvokeTest 
{ 
    //First param is of course either in your PATH, or an absolute path: 
    [DllImport("msvcrt.dll", EntryPoint="puts", CallingConvention=CallingConvention.Cdecl)] 
    public static extern int PutString(string c); 
    [DllImport("msvcrt.dll", CallingConvention=CallingConvention.Cdecl)] 
    internal static extern int _flushall(); 

    public static void Main() 
    { 
     PutString("Test"); 
     _flushall(); 
    } 
} 
+2

msvcrt.dllの関数はcdecl呼び出し規約を使用します –

+0

それは無関係です私の例に。限り、私は彼がアセンブリではなくC#で働いていると言うことができます。 –

+0

いいえ、それは関連しています。 DllImport属性にCallingConvention = CallingConvention.Cdeclを追加する必要があります。 –

関連する問題