我有很多在 .NET 4.6 Framework 中制作的 C# DLL,需要升级到 .NET Core 6 - 这部分相对简单。
但是,该库还可以通过 COM Interop 在 C++ 应用程序中使用。此选项在 .NET 4.6 中相对简单,因为在构建时有一个选项可以公开给 COM Interop。这创建了一个.tlb文件,可以直接导入到 C++ 应用程序中。所有必要的编组都是在 C# 代码中完成的 - 数组作为 SafeArray 等传递(请参见下面的示例)。Regasm.exe 在事后运行以注册必要的 C# 代码。
升级到 .NET Core 6 后,失去了在运行时创建 .tlb 文件的功能。然而,(显然)互操作性应该是简单的。我见过像 DllExport 这样的 Nuget 包(其中有 SafeArrays 的不清楚的示例)。我已经阅读了一页又一页的 Microsoft 关于 COM 互操作和 COM 托管的参考资料,并阅读了相关示例。我简要地研究了构建我自己的 .tlb 文件的兔子洞。我见过许多自定义示例,但它们并没有扩展到这个确切的问题。
以下是我尝试连接在一起的一些代码,作为您的示例。我会做出什么样的改变?
要导入的 C# 代码
public void CSharpMacro(
[MarshalAs(UnmanagedType.SafeArray)] double[] D,
[MarshalAs(UnmanagedType.SafeArray)] double[] O,
[MarshalAs(UnmanagedType.SafeArray)] double[] H,
[MarshalAs(UnmanagedType.SafeArray)] double[] L,
[MarshalAs(UnmanagedType.SafeArray)] double[] …Run Code Online (Sandbox Code Playgroud)