Есть ли возможность отладить вложенную dll внутри приложения WX GUI? - PullRequest
0 голосов
/ 17 апреля 2020

Код включает в себя интеграцию 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 класса.

Ответы [ 3 ]

2 голосов
/ 17 апреля 2020

С Visual Studio (при условии, что у вас есть файл dll pdb (символы)), вы можете присоединить к любому процессу (например, к приложению GUI) и отладить его часть (например, часть dll). Если вы добавите точку останова на bool OutCome = LogUsageSend(tool,opt,tag) вы должны быть в состоянии войти в него.

0 голосов
/ 05 мая 2020

Спасибо за ваше мнение, ребята, я нашел ответ в кодовых блоках, похожий на ваши предложения.

Мы можем прикрепить хост-приложение к DLL. И отладка из самого проекта DLL.

0 голосов
/ 17 апреля 2020

Если вы разработали свою DLL в Visual Studio, вы можете указать приложение GUI в качестве файла запуска для отладки. Это в свойствах проекта, Debug. Таким образом, когда вы отлаживаете проект, запускается приложение GUI, и вы запускаете точки останова в DLL при их запуске.

Тем не менее, существует вероятность того, что cra sh произойдет до того, как функции получают контроль. Несоответствие соглашения о вызовах является распространенным виновником здесь; убедитесь, что экспортируемыми функциями являются __stdcall и extern "C".

...