c # — `coreclr_create_delegate` не работает при вызове из кода C ++ на Mac

Мне нужно вызвать метод, объявленный в библиотеке C # из кода C ++ на Mac. Я использую .Net Core Framework 2.0.x (2.0.3, 2.0.4).

Чтобы это работало, я звоню coreclr_initialize который успешно работает и возвращает 0, Я тогда звоню coreclr_create_delegate передавая необходимые аргументы, как указано ниже:

auto no_del = []( auto x ) { (void)(x); };
auto csharp_runIt = std::unique_ptr<csharp_runIt_t, decltype(no_del)>(nullptr, no_del);

int status = coreclr_create_delegate (
hostHandle,
domainId,
assemblyName.c_str(),
entryPointType.c_str(),
entryPointName.c_str(),
reinterpret_cast<void**>(&csharp_runIt)
);

Вот, hostHandle а также domainId получены от coreclr_initialize, Остальные значения: assemblyName (имя dll), entryPointType (название класса) и entryPointName (имя функции).
Запуск его возвращает отрицательное значение с шестнадцатеричным кодом: 0x80070002,

Я также передаю имя библиотеки, имя класса и имя метода в качестве аргументов.
Поскольку не многие попробовали это, не так много помощи доступно онлайн.

0

Решение

Хорошо, поэтому я понял, что было не так. Библиотека .NetCore находилась в пространстве имен и, таким образом, coreclr_create_delegate не был создан.
Поэтому не используйте пространство имен или не используйте его при вызове делегата C ++.

Код .Netcore должен выглядеть примерно так:

//namespace samplelibrary //This was causing error
//{
public class SampleClass
{
public static string MyFunc()
{
return "arrived";
}
}
//}
0

Другие решения

Вам необходимо указать полное имя для этого класса, если оно не находится в глобальном пространстве имен. Например, вам нужно установить entryPointType в samplelibrary.SampleClass Вот.

0