DLL导出对话框技术要点
来源:互联网 发布:banner请求网络图片 编辑:程序博客网 时间:2024/06/06 05:29
以前有写过,但是忘记了,这次又浪费了很多时间,现在写下来加深印象。
1.新建DLL工程,选择类型为"Regular Dll using shared MFC DLL";
2.将已有MFC工程的资源导入方法一:拷贝resource.h中相应的控件定义,再拷贝.rc文件中的对话框资源到当前DLL工程的.rc文件中;
方法二:通过project->add to project->files选择对应工程的.rc文件,再用Ctrl+c/v将需要的控件拷贝进来。
3.将已有工程的实现代码及需要的相关代码拷贝到当前DLL中
警告:带有APP类的头文件和实现文件不要拷贝,将其他文件中引用此文件的地方修改为当前xxxdll.h
否则会造成成功生成DLL,但是调用失败,原因是APP类中有Initinstance为程序入口,而DLL工程本身也有程序入口,从而产生冲突。
注意:多个基于对话框的MFC程序通过一个DLL导出时可能会因为控件ID冲突而发生错误,因此为避免这个问题,写对话框程序的时候一定要给每个控件赋予一个有意义的ID号,以免造成冲突而不可用。
4.在xxxdll.cpp中编写导出函数
形如:
extern "C" __declspec(dllexport) char* CORGDlg_RtnString()
{
AFX_MANAGE_STATE(AfxGetStaticModuleState());
CCORGDlgDlg dlg;
dlg.DoModal ();
char p[1024];
strcpy(p, dlg.infoStr.GetBuffer(0));
return p;
}
5. DLL文件的使用
生成文件后,可以用工具查看是否生成了正确的导出函数。
使用举例如下:
HINSTANCE hmod;
hmod =::LoadLibrary("OrgPidPlsrDlgDLL.dll");// CPLSYDlgDLL.dll CPSerialDll CPWMDlgDLL.dll CPLSR2DlgDLL.dll
if(hmod==NULL)
{
AfxMessageBox("Fail");
return;
}
CString strtest;
char str[1024];
memset(str, 0, 1024);
/*****************CORGDlg*********************/
#if 1
// 不传初始化配置,直接打开对话框进行设置后并返回
typedef const char* (*CORGDlg)();//定义函数指针类型
CORGDlg RtnString = (CORGDlg)GetProcAddress(hmod, "CORGDlg_RtnString");//获取函数void的地址
strcpy(str, RtnString());
strtest.Format("%s", str);
AfxMessageBox(str);
// 传递初始化配置,根据配置打开对话框,用户进行配置后再返回
CString iniStr = "initial string";
typedef const char* (*IniCORGDlg)(CString inistr);//定义函数指针类型
IniCORGDlg iniAdnRtn = (IniCORGDlg)GetProcAddress(hmod, "CORGDlg_InitialAndRtn");//获取函数void的地址
strcpy(str, iniAdnRtn(iniStr));
strtest.Format("%s", str);
AfxMessageBox(str);
#endif
FreeLibrary(hmod);
- DLL导出对话框技术要点
- DLL中导出对话框
- 系统登录对话框技术要点
- DLL导出对话框,主对话框程序调用DLL对话框
- 创建导出对话框的dll
- Dll导出对话框导致内存泄露
- MFC扩展DLL导出对话框类
- MFC扩展DLL导出对话框类
- Dll导出对话框导致内存泄露
- MFC导出对话框类DLL的实现
- C++ 实现远程注入DLL技术要点总结
- 实现MFC扩展DLL中导出类和对话框
- 一步一步实现MFC扩展DLL中导出类和对话框
- 实现MFC扩展DLL中导出类和对话框
- 实现MFC扩展DLL中导出类和对话框
- 一步一步实现MFC扩展DLL中导出类和对话框
- 一步一步实现MFC扩展DLL中导出类和对话框
- 实现MFC扩展DLL中导出类和对话框
- WinCE虚拟串口驱动(二) .
- thinkphp里面success的小用法
- matlab判断空值:isempty
- 常用的C#正则表达式!
- myeclipse 集成 maven3
- DLL导出对话框技术要点
- html5实例解析:开发web app的过程(离线存储)
- git status简单用法
- Wince设置/删除/查询环境变量
- A*搜索算法随想
- sql*plus 学习
- hdu 1569 方格取数(2)
- git 官方简介
- 从零开始at91sam9263的linux编程----内核编译