2017-05-05 60 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

沒有那不是我現在編輯的原因。它的複製粘貼錯誤在這裏:) – Dilip

+0

@Adrian響應是正確的......如果你真的想從C#調用C++(但注意它很脆弱,這是一種痛苦,最終它並不是真的有用),請參閱http://stackoverflow.com/a/42552494/613130 – xanatos

回答

3

問題是您嘗試調用類成員方法。在在.cpp

地點文件中流動的功能(未類成員)

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

和更新在的.cs

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

謝謝,它的工作很好:) – Dilip