Я нашел проект DllExport на GitHub, когда искал способ использования кода C # .NET Core 3 из Plain C / C ++. Моя цель - собрать C # для любой динамической библиотеки и использовать его как в Linux, так и в Windows с помощью dlopen ( dlopen для Windows ).
Библиотека C #, которую я пытаюсь создать:
using RGiesecke.DllExport;
using System;
namespace CSharpPart
{
public class Test
{
[DllExport]
public static int _add(int a, int b)
{
return a + b;
}
}
}
Код 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;
}
При вызове dlopen возвращается ненулевой дескриптор, который, как я предполагаю, означает, что сама библиотекаможно открыть. dlsym вернуть NULL. При просмотре C # DLL через DLL Export Viewer можно подтвердить, что DLL не содержит записи _add.
Я попытался обернуть проект C # в проект C ++ / CLI, как предложено здесь но, похоже, он не работает с .NET Core.
Я читал, что есть возможность использования COM-взаимодействия, но я не совсем понял, о чем идет речь, и яЯ не уверен, что он будет работать кроссплатформенно, как.
Боюсь, что DLLExport просто еще не совместим с .NET Core. Есть ли способ достичь моей цели, как я ее описал?