是否可以构建面向 Linux 和 Windows 的 .Net Core C++/CLI 应用程序

8 c# c++ c++-cli

我正在尝试构建一个 3 层以下的应用程序

  1. C#层
  2. C++/CLI 包装层
  3. C++层

我在 .Net Core 3.1 中构建了 C# 和 C++/CLI 层。但我无法在 Linux 平台上发布这个。

从微软关于.Net Core 3.1的新闻稿来看,它说.Net core C++/CLI将仅支持Windows。

有没有其他方法可以在 C++/CLI 层实现平台独立性?

或者有没有其他方法可以直接从 C# 与 C++ 层通信?

我尝试使用 pInvoke 方法。但它不能将 C# 对象传输到 C++。

要实现的目标是,使用相同的源代码应该能够在 Windows、Linux 和 Mac OS 中构建,而无需使用任何第三方服务。

注意:对于在 .NetCore 中构建的 C# 应用程序,我们可以实现这一点。我们唯一需要做的就是将项目发布到不同的平台。

Art*_*kov 0

您可以将 C# 对象传输到 C++ 槽GCHandle。您还必须将 C# 函数的指针传输到非托管代码中(通过 获取它们GetFunctionPointerForDelegate)。

然后,在非托管代码中,您可以调用该函数并将对象句柄作为参数之一传递。

C# 代码示例

public static unsafe void Invoke(System.IntPtr instancePtr, int param)
{
    var instanceHandle = GCHandle.FromIntPtr(instancePtr);
    var instance = ((ClassInstance) instanceHandle.Target);

    instance.method(param);
}
Run Code Online (Sandbox Code Playgroud)

因此,您必须将指向Invoke函数的指针和指向 GCHandle () 的 IntPtr传输GCHandle.ToIntPtr到 C++ 代码中。