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

Access C# static class from a C++ DLL

本文关键字:静态类 访问 C++DLL      更新时间:2023-10-16

我的任务是为一个我没有源代码的遗留C++DLL编写一个新接口,由于我之外的原因,该DLL直接访问遗留应用程序中的全局类。

从应用程序来看,它类似于:

extern Interface *App;
...
Interface App*;   //  A pointer to our interface class.

然后,从遗留DLL:

if( App->GetStatus() ) return false;

App引用的Interface类在C#中重写起来很简单,但我如何使其等效于extern,以便遗留的C++DLL可以访问它?

谢谢!

您可以尝试使用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#应用程序之前加载mono来解决这个问题,但在你的情况下,这听起来不可能。

(此外,只有在项目属性中明确设置了构建目标(例如x86)时,UnmanagedExports才会起作用)