Код включает в себя интеграцию DLL мониторинга использования с существующим хостом dll. Хост dll загружается приложением WX GUI для обратных вызовов. DLL мониторинга использования работает следующим образом.
Инициализация // f1
частота использования экспорта // f2
экспорт сигнала использования на сервер // f3
deinit // f4
f1 интегрирован в процедуру инициализации dll моего хоста, f2 - в функцию на основе событий в dll хоста, а также deinit - в мой хост длл деинит.
когда я интегрирую только f1 и f3, gui не создает sh и работает нормально. Когда я интегрирую основную функцию f2, чтобы сигнализировать об использовании функции обратного вызова в моем хосте dll, и запускаю приложение GUI, оно сразу падает, когда я меняю значения виджета.
Однако, когда я использую dll «использование» в примере программы (EXE не хост dll), это работает как чудо.
HINSTANCE hGetProcIDDLL;
typedef void (__stdcall *lgUsgIn)(bool);
typedef void (__stdcall *SetMinInt)(long);
typedef bool (__stdcall *lgUsgSnd)(const char*,const char*,const char*);
typedef void(__stdcall *waitforCom)(void);
lgUsgIn LogUsageInit;
lgUsgSnd LogUsageSend;
SetMinInt SetMinInterval;
waitforCom WaitForCompletion;
hGetProcIDDLL = LoadLibrary("D:\\HTA_NG_DevEnvironment\\Utilization\\LogUsage.dll");
LogUsageInit = (lgUsgIn)GetProcAddress(hGetProcIDDLL, "LogUsageInit");
SetMinInterval = (SetMinInt)GetProcAddress(hGetProcIDDLL, "SetMinInterval");
LogUsageSend = (lgUsgSnd)GetProcAddress(hGetProcIDDLL, "LogUsageSend");
WaitForCompletion = (waitforCom)GetProcAddress(hGetProcIDDLL, "WaitForCompletion");
LogUsageInit(1);
SetMinInterval(600);
const char tool[] = "tooln1";
const char opt[] = "remoteValidation";
const char tag[] = "none";
bool OutCome = LogUsageSend(tool,opt,tag); // **crash happens when this function is included**
WaitForCompletion();
FreeLibrary(hGetProcIDDLL);
Также функция, используемая для загрузки Host Dll в WX GUI Приложение является функцией Load()
из wxDynamicLibrary
класса.