DLLExport в .NET Core 3 для использования в неуправляемом коде C / C ++ - PullRequest
2 голосов
/ 30 сентября 2019

Я нашел проект 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. Есть ли способ достичь моей цели, как я ее описал?

...