好文档 - 专业文书写作范文服务资料分享网站

20动态链接库编程

天下 分享 时间: 加入收藏 我要投稿 点赞

最后的头文件为:(其中绿色为向导添加的,红色为手工添加的)

// ExtClientDlg.h : 头文件 //

#include \#pragma once

// CExtClientDlg 对话框

class CExtClientDlg : public CDialog { ?? public: };

在客户对话框类的初始化对话框成员函数OnInitDialog中,手工添加设置数据编辑框初值的代码(红色部分):

BOOL CExtClientDlg::OnInitDialog() {

int m_iData1; int m_iData2;

CCompute *m_pComp; void Comp(UINT nID);

afx_msg void OnBnClickedAdd(); afx_msg void OnBnClickedSub(); afx_msg void OnBnClickedMul(); afx_msg void OnBnClickedDiv(); afx_msg void OnBnClickedMod();

CDialog::OnInitDialog(); ??

// TODO: 在此添加额外的初始化代码 SetDlgItemInt(IDC_DATA1, 5); SetDlgItemInt(IDC_DATA2, 3);

16

}

代码文件ExtClientDlg.cpp中其他新加内容有:(其中红色部分为手工添加的)

void CExtClientDlg::OnBnClickedAdd() { }

void CExtClientDlg::OnBnClickedSub() { }

void CExtClientDlg::OnBnClickedMul() { }

void CExtClientDlg::OnBnClickedDiv() { }

void CExtClientDlg::OnBnClickedMod() {

17

return TRUE; // 除非将焦点设置到控件,否则返回 TRUE

// TODO: 在此添加控件通知处理程序代码 Comp(IDC_ADD);

// TODO: 在此添加控件通知处理程序代码 Comp(IDC_SUB);

// TODO: 在此添加控件通知处理程序代码 Comp(IDC_MUL);

// TODO: 在此添加控件通知处理程序代码 Comp(IDC_DIV);

}

// TODO: 在此添加控件通知处理程序代码 Comp(IDC_MOD);

void CExtClientDlg::Comp(UINT nID) { }

UpdateData(); // 动态获取用户输入的数据并赋值给对应的控件变量 m_pComp = new CCompute(m_iData1, m_iData2); // 创建计算对象 int r; double dr;

switch(nID) { // 进行四则和取模运算 }

delete m_pComp;

if (nID != IDC_DIV) SetDlgItemInt(IDC_RESULT, r); // 显示整数结果 else { // 显示除法所得的实数结果 }

wchar_t buf[20];

swprintf_s(buf, 20, L\SetDlgItemText(IDC_RESULT, buf); case IDC_ADD: r = m_pComp->Add(); break; case IDC_SUB: r = m_pComp->Sub(); break; case IDC_MUL: r = m_pComp->Mul(); break; case IDC_DIV: dr = m_pComp->Div(); break; case IDC_MOD: r = Mod(m_iData1, m_iData2); break;

20.2.7 编译运行

为了运行客户程序,需要将客户程序项目设置成启动项目。具体做法是,先在项目管理区中选中ExtClient项目,然后选择菜单项“项目\\设为启动项目”。

18

编译后,会在解决方案的Debug或Release目录中生成动态链接库文件ExtDll.dll和客户程序的可执行文件ExtClient.exe,以及DLL的导出文件ExtDll.exp和(静态连接)库文件ExtDll.lib。

运行结果如图20-9所示:

图20-9 客户程序ExtClient的运行结果

20.3 规则DLL

使用MFC编写的规则DLL,虽然只能导出函数而不能导出整个类,但是其导出的函数却可以被其他非MFC应用程序所调用。下面我们仍通过上面的四则运算的例子,看看如何用关键字__declspec(dllexport)和extern \来编写和使用导出若干(全局)C函数的规则MFC DLL。

20.3.1 创建DLL项目

我们创建一个名为RegDll的规则DLL的“Visual C++”之“MFC”的“MFC DLL”项目,注意仍需选中“创建解决方案的目录”复选框,参见图20-10。

19

图20-10 新建MFC DLL项目RegDll的对话框

按“确定”钮,弹出“MFC DLL向导”对话框。在“DLL类型”栏中,选中“使用共享MFC DLL的规则DLL”单选钮,参见图20-11。按“完成”钮,创建RegDll解决方案和项目。

图20-11 选择规则DLL的MFC DLL向导对话框

也可以选择“带静态链接MFC的规则DLL”,差别是所生成的DLL中会包含MFC库,当然所生成的库文件也会大一些(但因此可不用另外安装MFC动态链接库)。例如,在此例中,选共享MFC所生成的RegDll.dll文件只有13KB大,而选择静态MFC的则有199KB。

20

20动态链接库编程

最后的头文件为:(其中绿色为向导添加的,红色为手工添加的)//ExtClientDlg.h:头文件//#include\#pragmaonce//CExtClientDlg对话框classCExtClientDlg:publicCDialog{??public:
推荐度:
点击下载文档文档为doc格式
0v8wb6ciup4zk8m0i2f5
领取福利

微信扫码领取福利

微信扫码分享