从C ++ DLL访问C#静态类

时间:2015-03-30 22:36:52

标签: c# c++ dll extern legacy-code

我的任务是为遗留的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可以访问它?

谢谢!

1 个答案:

答案 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)