.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 ++而言,它需要更多的工作/需要文件。我是个傻瓜,所以我可能会错过一些东西。
答案 0 :(得分:2)
你可以在C ++中使用GetProcAddress
并直接调用它。这与P / Invoke的相似。
使用导入库是为了使标准链接器能够工作(而P / Invoke和GetProcAddress
绕过链接器。)