C ++ вызывает функции из c # -dll не работает - PullRequest
0 голосов
/ 03 сентября 2018

Я написал c # (net 3.5) dll и экспортировал некоторые функции через «Неуправляемый экспорт» Роберта Гизеке:

[DllExport("VersionString", CallingConvention =
CallingConvention.Cdecl)] 

public static string VersionString() { .... return "test"; }

Затем я написал оболочку c ++ для моей c # -dll. В c ++ я вызываю LoadLibrary и GetProcAddress, чтобы получить ссылку на функцию c #.

Я могу вызвать функцию и получить возвращаемое значение. Работает как шарм.

HINSTANCE hJConnectInstance = LoadLibrary(L"JConnect.Base.dll");

typedef char *(__cdecl *func_i)();

func_i net_function = (func_i)GetProcAddress(hJConnectInstance, VersionString");

std::string result = std::string(net_function());

std::cout << "csharp result: " << result << std::endl;

Но моей целью было вернуть строку JSON из .net, поэтому я добавил Newtonsoft.json в свой проект на c #.

Теперь каждый раз, когда я вызываю функцию c # из моей оболочки, я получаю сообщение об ошибке в c ++. Ошибка отсутствует в коде c #, потому что она работает при вызове из другого проекта c #.

Я даже не могу сказать, что за ошибка выдается в c ++, потому что я не знаю, как правильно ее перехватить. (Я ноб с ++)

Вопросы:

  • Что может быть причиной сбоя вызова функции c #, когда дополнительные библиотеки добавляются в проект c #?
  • Как правильно отловить ошибку в моем проекте c ++?

Спасибо!

1 Ответ

0 голосов
/ 04 сентября 2018

После прочтения комментария от Ганса Пассанта я обнаружил проблему. Мне удалось получить сообщение об ошибке, в котором сообщалось, что у одного из моих упомянутых dll нет строгого имени. Исправление, которое решило проблемы.

Спасибо!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...