我的任务是为遗留的C ++ DLL编写一个新接口,我没有源代码,由于我之外的原因,它直接访问遗留应用程序中的全局类。
从应用程序中,它类似于:
extern Interface *App;
...
Interface App*; // A pointer to our interface class.
然后,从遗留DLL:
if( App->GetStatus() ) return false;
App引用的Interface类在C#中重写非常简单,但是如何使它等同于extern
以便遗留的C ++ DLL可以访问它?
谢谢!
答案 0 :(得分:0)
您可以尝试使用Robert Giesecke" UnmanagedExports" nuget包实现这样的功能如下:
class Test
{
[DllExport("add", CallingConvention = CallingConvention.Cdecl)]
public static int TestExport(int left, int right)
{
return left + right;
}
}
<强>然而强>:
a)我相信这只适用于方法,而不适用于类和
b)在C#中导出DLL的本机方式的原因是因为调用应用程序必须加载.NET框架才能访问该入口点。这也适用于我上面链接的UnmanagedExports nuget包。
你可以通过在调用C#应用程序之前让你的C ++应用程序加载单声道来解决这个问题,但是在你的情况下听起来并不是这样。
(另外,UnmanagedExports只有在项目的属性中明确设置构建目标时才有效 - 例如.x86)