该代码涉及将使用情况监视dll集成到现有主机dll。主机dll由WX GUI应用程序加载以进行回调。使用情况监视dll的工作原理如下。
初始化// f1
usageexportfrequency // f2
将使用情况信号导出到服务器// f3
deinit // f4
f1已集成到我的主机dll初始化例程中,f2已集成到主机dll中基于事件的函数中,并且同样已初始化为我的主机dll deinit。
当我仅集成f1和f3时,gui不会崩溃并且可以正常工作。当我将主要的f2功能集成到主机dll中并指示使用回调函数并运行GUI应用程序时,当我更改窗口小部件值时立即崩溃。
但是,当我在示例程序(EXE不是主机dll)中使用“使用” dll时,它的工作原理就像一个超级按钮。
'''提示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); // 包含此功能时发生崩溃
WaitForCompletion();
FreeLibrary(hGetProcIDDLL);
'''
用于将主机Dll加载到WX GUI应用程序的功能也是来自wxDynamicLibrary类的Load()函数。
使用Visual Studio(假设您具有dll pdb文件(符号)),可以附加到任何进程(例如GUI应用程序)并调试其中的一部分(例如dll部分)。如果在[C0 ],您应该可以进入它。