「運行」看起來是一種非靜態的類方法。儘管可以從C#中調用這些方法,但這不是主要的用例。這將是比較容易的方式,從.NET使用它,如果你通過COM揭露它,或者,至少作爲一個普通的C接口:
extern "C" __declspec(dllexport) void* Testing_Test_Create();
extern "C" __declspec(dllexport) void Testing_Test_Destroy(void* self);
extern "C" __declspec(dllexport) int Testing_Test_Run(void* self, char* filePath, bool bEntry, double duration);
這裏是一個示例如何調用C++從C#類方法:
// Test.cpp in NativeLib.dll
namespace Testing
{
class __declspec(dllexport) Test
{
public:
explicit Test(int data)
: data(data)
{
}
int Run(char const * path)
{
return this->data + strlen(path);
}
private:
int data;
};
}
// Program.cs in CSharpClient.exe
class Program
{
[DllImport(
"NativeLib.dll",
EntryPoint = "[email protected]@@[email protected]@Z",
CallingConvention = CallingConvention.ThisCall,
CharSet = CharSet.Ansi)]
public static extern void TestingTestCtor(IntPtr self, int data);
[DllImport(
"NativeLib.dll",
EntryPoint = "[email protected]@[email protected]@[email protected]",
CallingConvention = CallingConvention.ThisCall,
CharSet = CharSet.Ansi)]
public static extern int TestingTestRun(IntPtr self, string path);
static void Main(string[] args)
{
var test = Marshal.AllocCoTaskMem(4);
TestingTestCtor(test, 10);
var result = TestingTestRun(test, "path");
Console.WriteLine(result);
Marshal.FreeCoTaskMem(test);
}
}
入口點的名稱可能是您的構建配置/編譯器不同,所以使用DUMPBIN實用程序來獲取它們。再次,這只是一個概念證明,在真實代碼中使用COM會更好。
什麼樣的dll?用C寫的? – 2011-02-03 10:41:36
我猜這不是一個COM DLL。你確定DLL中的Run函數被導出嗎? – 2011-02-03 10:43:50