当通过LoadLibrary调用DLL时,MFC状态无效
发布时间:2020-12-14 05:35:43 所属栏目:Windows 来源:网络整理
导读:我正在与MFC战斗并动态地将DLL与LoadLibrary链接.当app调用DLL时,我似乎无法获得MFC状态,并且DLL在同一个调用中回调.最终,它导致了大量的断言. 这是我正在做的代码模型. 该应用程序是正常的,直接来自向导MFC应用程序.我在某个地方有按钮,这是按钮的处理程序
我正在与MFC战斗并动态地将DLL与LoadLibrary链接.当app调用DLL时,我似乎无法获得MFC状态,并且DLL在同一个调用中回调.最终,它导致了大量的断言.
这是我正在做的代码模型. >该应用程序是正常的,直接来自向导MFC应用程序.我在某个地方有按钮,这是按钮的处理程序: void callback() { AFX_MANAGE_STATE(AfxGetStaticModuleState( )); CDialog1 dlg; dlg.DoModal(); } typedef void (*TPluginMainFunc)(void*); void CTheApp1View::OnTestRun1() { static HMODULE hPluginMFCShared = LoadLibrary( _T("PluginMFCShared") ); if ( hPluginMFCShared ) { TPluginMainFunc func = (TPluginMainFunc) GetProcAddress( hPluginMFCShared,"plugin_main" ); if ( func ) { func(callback); } } } >然后’PluginMFCShared’看起来像这样: typedef void (*TFunc)(); extern "C" void GS_EXTERNAL_ENTRY plugin_main(TFunc func) { AFX_MANAGE_STATE(AfxGetStaticModuleState( )); func(); CDialog1 dlg; dlg.DoModal(); } 因此,我们的想法是应用程序(CTheApp1View :: OnTestRun1)加载一个库并调用直接传入回调指针的函数.在继续之前,库将使用该回调从应用程序执行某些操作. 我以为AFX_MANAGE_STATE会处理MFC状态,但似乎还有更多工作需要完成. 可以找到一个测试项目(确保将TheApp1项目设置为启动项目): 有任何想法吗? 谢谢你的任何建议. 解决方法
这是另一个建议.在App变量中,添加名为m_pModuleState的AFX_MODULE_STATE *变量,并在InitInstance函数末尾初始化它,
m_pModuleState = AfxGetModuleState(); 修改回调函数以在打开对话框之前设置应用程序状态,然后在退出函数之前设置回原始状态 void callback() { //Get the original state AFX_MODULE_STATE* pOriginalState = AfxGetModuleState(); //Set the mfc state AfxSetModuleState(((CTheApp1App*)&theApp)->m_pModuleState); //Do stuff here CDialog1 dlg; dlg.DoModal(); //Set the mfc state back to its original state AfxSetModuleState(pOriginalState); } 并保持你的插件在你的例子中 extern "C" void GS_EXTERNAL_ENTRY plugin_main(TFunc func) { AFX_MANAGE_STATE(AfxGetStaticModuleState( )); func(); CDialog1 dlg; dlg.DoModal(); } 这样,您可以在插件中调用AFX_MANAGE_STATE,但是当某些插件调用回调函数时,您确保设置应用程序的状态,以便它可以找到良好的对话框资源并执行特定于状态的函数 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
相关内容
- windows-server-2008 – 我可以从命令行为另一个登录用户启
- Windows – 将Azure网站迁移到Azure云服务
- reporting-services – ColdFusion报告选项
- Windows – Powershell:捕获程序stdout和stderr以分隔变量
- ArcGis Classic COM Add-Ins插件.dll的安装与卸载
- 适用于Windows服务器的开源代理服务器软件?
- ZXing.dll 生成二维码 C# winform net4.5
- 如何在Windows中为npm运行脚本设置shell
- windows – 调试Win 16位应用程序的最佳方法?
- 怎么删除服务中的mysql服务
推荐文章
站长推荐
- Shared Event-loop for Same-Origin Windows(译)
- 在Windows 10中使用vb6进行webautomation时出错
- Window 系统 Excel 同时打开两个Excel 文件
- windows – 检测用户何时截取我的程序的屏幕截图
- windows10 企业版完整激活
- 在Windows 7上启用MySQL 5查询日志
- windows-phone-7.1 – 在Windows Phone 7(Mango)
- 使用windows/dos shell/batch命令,如何获取文件并
- FindFirstChangeNotification是Windows上用于文件
- 备份 – 备份VHD集
热点阅读