我正在尝试构建一个 3 层以下的应用程序
我在 .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# 应用程序,我们可以实现这一点。我们唯一需要做的就是将项目发布到不同的平台。
您可以将 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++ 代码中。
| 归档时间: |
|
| 查看次数: |
5601 次 |
| 最近记录: |