使用C#中的pinvoke从动态链接库调用成员级函数?

时间:2010-03-02 05:11:17

标签: c# c++ dll

我如何使用DLLImport pinvoke来调用我在非托管DLL中的类中编写的函数? 它总是抛出dll中不存在入口点。 EX:

class Foo
{
  int __declspec(dllexport) Bar() {return 0;}
};

Bar在Foo类中。 当我使用pinvoke作为:

[DLLImport("Test.dll")]
public static extern int Bar();

使用它时,我得到一个例外,说DLL中不存在入口点。 是否可以直接从类中调用函数?

3 个答案:

答案 0 :(得分:1)

简答:

没有

答案很长:

创建C可调用导出(包括实例参数的iow)。

答案 1 :(得分:1)

你将不得不找到受损的名字。你可以使用dumpbin / exports但是'我不确定调用约定是否可以通过pinvoke工作。

答案 2 :(得分:1)

不容易......

要调用成员函数,第一个“hidden”参数必须是指向您正在调用的成员函数的C ++类的指针。

C ++函数是名称管理的,因此您需要找到您正在调用的函数的名称管理名称。

简而言之:创建C ++类的C ++ / CLI包装器更容易实现此目的。