Я написал 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 ++?
Спасибо!