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对话框

MFC中实现点击菜单的选项弹出一个对话框

在 MFC 中不断增加进度条

vc++ 调试时出现Debug Assertion Failed!该怎么办?

卸载时弹出启动c program时出现问题 找不到制定的模块

开机时出现【没有找到libprotobuf.dll,因此这个程序未能启动。重新安装应用程序可能会修复此问题。】