2017-05-05 18 views
1

C#コードでC++ dllを呼び出そうとしています。 私のヘッダファイル -C#コードでC++ dllを呼び出す

#define MLTtest __declspec(dllexport) 
class MLTtest testBuilder 
{ 
public: 
    testBuilder(void); 
    ~testBuilder(void); 


    int testfunc (int iNumber); 
}; 

マイ.CPPクラス

int testBuilder::testfunc (int iNumber) 
{ 

    return iNumber*2 ; 
} 

は、ここでそのDLLを使用するための私のC#コードです。

class Program 
{ 

    [DllImport(@"C:\Sources\Operations\Online.Dev\BIN\Debug\Mlt1090d64.dll", CallingConvention = CallingConvention.Cdecl, EntryPoint = "testfunc")] 
    public static extern int testfunc(int n); 

    static void Main(string[] args) 
    { 
     try 
     { 
      int x = testfunc (50); 
     } 
     catch (Exception ex) 
     { 
     } 
    } 
} 

が、私はこの例外の例外を得続ける:

DLL 「Cの 'testfunc' という名前のエントリポイントが見つかりません:ソース\を\オペレーション\ Online.Dev BIN \デバッグ\ \ Mlt1090d64.dll '。

+0

なしthatsのない私は、今編集した理由。そのコピー貼り間違いはここに:) – Dilip

+0

@アドリアンの応答は正しいです...あなたが本当にC#からC + +を呼び出す場合(しかし、それは脆いことに注意してください、それは痛みであり、最終的にそれは本当に有用ではない)、http://stackoverflow.com/a/42552494/613130 – xanatos

答えて

3

問題は、クラスメンバーメソッドを呼び出そうとしていることです。

は.csで

.cppファイルに入れ流れる機能(ないクラスのメンバ)

extern "C" int __declspec(dllexport) testfunc(int iNumber) 
{ 
    return iNumber*2; 
} 

と更新

[DllImport(@"C:\Sources\Operations\Online.Dev\BIN\Debug\Mlt1090d64.dll", CallingConvention = CallingConvention.Cdecl)] 
public static extern int testfunc(int n); 
+0

を参照してくださいありがとう、その仕事はうまく:) – Dilip

関連する問題