mfc通过调用dll文件弹出对话框时出现中断
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了mfc通过调用dll文件弹出对话框时出现中断相关的知识,希望对你有一定的参考价值。
参考技术A 一、dll部分同过VS向导建立一个MFC dll工程,在工程中创建自己的MFC类,来实现将要展示的界面。新建一个cpp工程,添加头文件#include "StdAfx.h"和界面类的头文件,然后使用下面语句来导出
extern "C" __declspec(dllexport) void ShowDlg(void)
AFX_MANAGE_STATE(AfxGetStaticModuleState());
CXXDlg dlg;
dlg.DoModal();//实现DLL资源切换的?AFX_MANAGE_STATE(AfxGetStaticModuleState());
其中CXXDlg是界面类,必须添加代码AFX_MANAGE_STATE(AfxGetStaticModuleState());
作用:用于模块切换时的状态保护,
1.AfxGetStaticModuleState()指向当前模块状态;
2.当前函数调用结束后原模块的状态自动被恢复;
3.用于DLL中所调用MFC函数、类、资源时的模块状态切换;
也就是说,并不是每一个dll的输出函数前都要调用它,只有在要输出对话框等用到资源时要调用!
dll中资源是共享的用了这个函数的防止不同的进程修改资源产生错误!
缺省情况下MFC使用主应用程序的资源句柄来载入资源模板,而DLL中的资源模板是存在于DLL模板中,因此要使用这一语句切换到
二、调用dll
采用如下代码调用dll并显示界面
typedef void (*lpFun)(void);
HINSTANCE hDll;
hDll=LoadLibrary(L"XX.dll");
if(NULL==hDll)
MessageBox(L"加载失败");
lpFun addFun;
lpFun pShowDlg=(lpFun)GetProcAddress(hDll,"ShowDlg");
if(pShowDlg==NULL)
MessageBox(L"加载失败");
pShowDlg();
CloseHandle(hDll);
其中XX.dll为dll的名称追问
正常一开始是可以运行并弹出对话框的,后面重新编译一次新生成的那个DLL文件后就不行了,然后再把原来的DLL文件拷贝覆盖就又没问题了,大神求解,谢谢
从应用程序对话框访问的 MFC 自定义键盘 DLL
【中文标题】从应用程序对话框访问的 MFC 自定义键盘 DLL【英文标题】:MFC Custom Keyboard DLL Accessed from Application Dialog Box 【发布时间】:2015-04-29 18:56:56 【问题描述】:总体目标是能够通过我在 MFC 中制作的应用程序访问弹出式键盘。
我创建了一个带有空文本字段的对话框。我希望能够单击空白字段并使用屏幕键盘在数据字段中输入。
是否有任何人都可以提供给我以执行此功能的功能或教程列表?最终,我将从头开始制作键盘,因此任何指导都会很有用。
【问题讨论】:
【参考方案1】:我的第一个想法(我可能错了,如果我错了,有人可能会纠正我。)
1) 在 MFC DLL 中创建您的键盘 Ui 并导出键盘功能,如 LaunchKB(Int screenx,int screeny)
和 CloseKB()
功能。
2)我将 CEdit 和 CRichedit 子类化,这样当编辑控件获得或失去焦点时,它会调用带有必须显示键盘的 Windows ScreenX 坐标的 LaunchKB() 函数或 CloseKB()。
3) 注册到 dll 的回调函数,每次点击键盘并点击字符时都会调用该回调函数,这些字符将显示在编辑控件中。
这只是我的想法,可能还有更好的方法来实现。
【讨论】:
以上是关于mfc通过调用dll文件弹出对话框时出现中断的主要内容,如果未能解决你的问题,请参考以下文章
MFC钩子问题 我想点击一个按钮 弹出一个对话框 然后用钩子函数修改消息,点击之后弹出另一个dui对话框
vc++ 调试时出现Debug Assertion Failed!该怎么办?