我有一個非託管C++ dll,對此我沒有訪問代碼的權限,但擁有所有的方法聲明。使用pinvoke從C#調用非託管C++代碼
讓我們爲了簡單說.H是這樣的:在.cpp文件
#include <iostream>
#ifndef NUMERIC_LIBRARY
#define NUMERIC_LIBRARY
class Numeric
{
public:
Numeric();
int Add(int a, int b);
~Numeric();
};
#endif
和方法實現
int Numeric::Add(int a, int b)
{
return (a + b);
}
我只是想打電話從C++的附加功能在我的C#代碼:
namespace UnmanagedTester
{
class Program
{
[DllImport(@"C:\CPP and CSharp Project\UnmanagedNumeric\Debug\numeric.dll", EntryPoint = "Add")]
public static extern int Add(int a, int b);
static void Main(string[] args)
{
int sum = Add(2, 3);
Console.WriteLine(sum);
}
}
}
嘗試執行後我有以下錯誤:
無法在DLL'C:\ CPP和CSharp Project \ UnmanagedNumeric \ Debug \ numeric.dll'中找到名爲'Add'的入口點。
我不能更改C++代碼。不知道發生了什麼問題。 感謝您的幫助。
是不是類的成員方法?不在公共命名空間中? – Tim 2011-06-13 14:57:41
我不是C#中非託管代碼的專家,但我認爲由於Add是Numeric內部的一種方法,因此您很可能需要製作一個Numeric實例並調用該實例上的方法。如果它是靜態的,那麼你的方法可能會奏效。 – 2011-06-13 14:58:15