.NET Core 3 中的 DLLExport 用于非托管 C/C++ 代码

pat*_*vax 5 c# c++ cross-platform dllexport .net-core

我在 GitHub 上找到了DllExport项目,同时正在寻找一种使用普通 C/C++ 中的 C# .NET Core 3 代码的方法。我的目标是能够将 C# 编译为任何动态库,并在 Linux 或 Windows 上使用 dlopen ( dlopen for Windows )使用它。

我正在尝试创建的 C# 库:

using RGiesecke.DllExport;
using System;

namespace CSharpPart
{
    public class Test
    {
        [DllExport]
        public static int _add(int a, int b)
        {
            return a + b;
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

我试图引用 C# 库的 C/C++ 代码:

#include "CPartCMake.h"
    #include "dlfcn.h"
    #include "cstring"

    using namespace std;

    int main()
    {
        const char* pemodule = "path_to_dll\\CSharpPart.dll";
        void* handle = dlopen(pemodule, RTLD_NOW);

        typedef int(_cdecl* _add)(int a, int b);
        _add pAdd = (_add)dlsym(handle, "_add");
        cout << pAdd(5, 7);
        return 0;

    }
Run Code Online (Sandbox Code Playgroud)

对 dlopen 的调用返回一个非 NULL 句柄,我猜这意味着可以打开库本身。dlsym 返回一个 NULL。当通过DLL 导出查看器查看C# DLL 时,可以确认 DLL 不包含 _add 条目。

我尝试将 C# 项目包装在 C++/CLI 项目中,如此处建议的那样但它似乎不适用于 .NET Core。

我读到也有可能使用 COM 互操作,但我并没有真正理解它的含义,我不确定它是否可以跨平台工作。

恐怕 DLLExport 还与 .NET Core 不兼容。有没有办法像我描述的那样实现我的目标?