gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-03 06:55:22 25 4
gpt4 key购买 nike

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

  • C#层
  • C++/CLI 包装层
  • 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# 应用程序,我们可以实现这一点。我们唯一需要做的就是发布不同平台的项目。

    最佳答案

    您可以通过 GCHandle 将 C# 对象传输到 C++ 槽.您还必须将指向 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);
    }
    所以你必须传递一个指向 Invoke的指针函数和一个 IntPtr 到 GCHandle ( GCHandle.ToIntPtr ) 到 C++ 代码。

    关于c# - 是否可以构建面向 Linux 和 Windows 的 .Net Core C++/CLI 应用程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59576460/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com