【问题标题】:Use C++ DLL in .NET在 .NET 中使用 C++ DLL
【发布时间】:2013-03-02 20:27:00
【问题描述】:

我昨天问了这个问题,关于使用 Cygwin 编译器生成可供 .NET 使用的 C++ DLL:Using C++ app in .NET

解决方案是使用 Visual C++ 而不是 Cygwin 编译 C++ 应用程序,即我能够从 .NET 调用 C++ 函数。

为什么我可以在 Visual C++ 而不是 Cygwin 中做到这一点?该代码可以在我的链接问题中找到。这是 Visual C++ DLL 的 Dependancy Walker 的屏幕截图,以帮助回答我的问题:

【问题讨论】:

标签: c++ vb.net cygwin


【解决方案1】:

名称修改方案在 gcc/mingw/cygwin 和 msvs 中有所不同。如果要在编译器之间共享 DLL,则必须使用纯 C 接口。

或者,您可以使用 .def 文件,如该问题底部答案中所述:How to use libraries compiled with MingW in MSVC?

【讨论】:

  • 谢谢,但我提供的屏幕截图没有显示函数名称没有被管理,即它是:你好。?
  • 啊,那么你有两个问题,第一个是当你来自mingw时,有一个名称修改问题,第二个是从托管代码中调用非托管代码。第二个很简单,但很烦人。这篇文章有几年的历史了,但显示了该怎么做:c-sharpcorner.com/uploadfile/tanmayit08/…
  • 谢谢,您的最后一条评论说:“存在名称修改问题”。我的问题中的屏幕截图不是显示没有吗?我是 C++ 互操作性的新手,所以我显然遗漏了一些东西。
  • 如果它是从 DLL 导出的 'extern "C"',您可能不会遇到这个问题。但是如果导出是一个成员变量或一个类,那么从另一个编译器系列中链接它应该会出现问题。从您的屏幕截图中,您当然可以使用 LoadLibrary 和 GetProcAddress 来获取“你好”。就个人而言,我尽量坚持使用 C 风格的接口(而不是 C++ 风格的接口)来导出 DLL,以避免名称混淆问题。
  • 对不起,我的 C 风格几乎是指全局函数导出。 C++ 风格是指对象或对象的成员。
猜你喜欢
  • 1970-01-01
  • 2012-04-19
  • 2019-03-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-12-01
  • 1970-01-01
相关资源
最近更新 更多