У меня есть неуправляемая dll, использующая cpprest и использующая неуправляемую функцию «Load». Функция принимает обратный вызов и вызывает обратный вызов, когда запрос выполнен.
Ниже приведен код C ++ int dll:
typedef void (__stdcall* MyCallback)();
static MyCallback g_cb;
DLL_API void Load(MyCallback cb) {
g_cb = cb;
httpClient.request(req).then([](){
g_cb();
});
}
Затем я создаю делегат от единицы до функции «Загрузка». Ниже приведен код в единстве:
private delegate void LoadCallback();
[DllImport(strDllName, CallingConvention = CallingConvention.Cdecl)]
private static extern void Load(LoadCallback onLoadResult);
void Start() {
m_onLoadConfig = new LoadCallback(OnLoadConfig);
Load(m_onLoadConfig);
}
private LoadCallback m_onLoadConfig;
private void OnLoadConfig() {/*Some output*/}
После запуска вызван делегат, вывод - то, что я хочу, все вроде нормально.
Но когда я закрываю приложение, оно зависает на
mono_win32_msg_wait_for_multiple_objects_ex
Я думаю, что это ошибка моно? Но какой обходной путь?