p / invoke调用函数如何仅使用C ++需要.a / .lib / .o文件?

时间:2015-09-22 18:59:19

标签: c# c++ c++-cli mingw pinvoke

.NET的P / invoke如何仅使用dll文件调用DLL中的函数,但对于C ++,如果没有.a/.lib / .o文件,则无法执行此操作?

背景:

我正在尝试使用来自C ++的“写入”来自C ++ / CLI应用程序的dll函数,但我告诉我只需要dll文件加标题是不够的.a/.lib / .o文件也是。如何使用minGw和C ++ / CLI编译此dll不支持.a文件,但只支持.lib s我将不得不使用MSVC编译器/链接器重新编译此dll。所以我想知道为什么C#中这个“简单”的东西会起作用:

[DllImport("foo.dll",
        CallingConvention = CallingConvention.Cdecl,
        EntryPoint="_Z9getNumberv")]
    public static extern int GetNumber();

但是对于C ++而言,它需要更多的工作/需要文件。我是个傻瓜,所以我可能会错过一些东西。

1 个答案:

答案 0 :(得分:2)

可以在C ++中使用GetProcAddress并直接调用它。这与P / Invoke的相似。

使用导入库是为了使标准链接器能够工作(而P / Invoke和GetProcAddress绕过链接器。)