【问题标题】:Calling member level functions from a dynamic link library using pinvoke in C#?在 C# 中使用 pinvoke 从动态链接库调用成员级函数?
【发布时间】:2010-03-02 05:11:17
【问题描述】:

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

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

Bar 属于 Foo 类。 当我使用 pinvoke 时:

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

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

【问题讨论】:

    标签: c# c++ dll


    【解决方案1】:

    不容易……

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

    而 C++ 函数是名称错位的,所以你需要找到你正在调用的函数的名称错位名称。

    简而言之:创建 C++ 类的 C++/CLI 包装器来执行此操作更容易。

    【讨论】:

      【解决方案2】:

      简答:

      没有

      长答案:

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

      【讨论】:

        【解决方案3】:

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

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2022-01-12
          • 2018-01-24
          • 1970-01-01
          • 2020-07-22
          • 1970-01-01
          • 2019-01-23
          相关资源
          最近更新 更多