新建一个MFC 扩展DLL 加一个类在工程


但在类的开头要加上class AFX_EXT_CLASS
CComputer : public CObject(基类)
头文件
#pragma once
// CComputer command target
class AFX_EXT_CLASS
CComputer : public CObject
{
public:
CComputer();
virtual ~CComputer();
void ComputerSet(double data1,double data2);
public:
double m_data1;
double m_data2;
public:
double Add();
double Substract();
double Devide();
double Multiple();
};
实现文件
#include "stdafx.h"
#include "Computer.h"
// CComputer
CComputer::CComputer()
{
m_data1 = 0;
m_data2 = 0;
}
CComputer::~CComputer()
{
}
void CComputer::ComputerSet(double data1,double data2)
{
m_data1 = data1;
m_data2 = data2;
}
double CComputer::Add()
{
return m_data1
+ m_data2;
}
double CComputer::Substract()
{
return m_data1
- m_data2;
}
double CComputer::Multiple()
{
return m_data1
* m_data2;
}
double CComputer::Devide()
{
if(m_data2
!= 0)
return (double )
m_data1 / (double) m_data2;
else
{
AfxMessageBox(_T( "分??母?不?能??为a零??" ));
return 1;
}
}
编译后产生 在Debug目录下产生 ExtensionDll.ilb和ExtensionDll.dll
然后创建测试dll的工程ExtensionTest是基于对话框的


添加控件一览
控件名称 | 控件ID | 变量名 |
IDC_DATA1 | m_data1 | |
IDC_DATA2 | m_data2 | |
IDC_RESULT | m_result | |
加 | IDC_ADD | OnComputer(UINT nID) |
减 | IDC_SUBSTRACT | |
乘 | IDC_MULTIPLE | |
除 | IDC_DEVIDE |
在ExtensionTeseDlg.h文件中添加
#include "Computer.h"
在类的内部添加
afx_msg void OnComputer(UINT
nID);
public:
double m_data1;
double m_data2;
double m_result;
CComputer * m_pComputer;
afx_msg void OnBnClickedCancel();
实现文件中
初始化参数
CExtensionTestDlg::CExtensionTestDlg(CWnd*
pParent /*=NULL*/)
:
CDialogEx(CExtensionTestDlg::IDD, pParent)
{
m_hIcon
= AfxGetApp()->LoadIcon(IDR_MAINFRAME);
m_pComputer
= new CComputer();
m_data1
= 0.0;
m_data2
= 0.0;
m_result
= 0.0;
}
在消息处理函数中添加
BEGIN_MESSAGE_MAP(CExtensionTestDlg,
CDialogEx)
ON_COMMAND_RANGE(IDC_ADD,IDC_DEVIDE,OnComputer)
END_MESSAGE_MAP()
剩余的函数
void CExtensionTestDlg::OnComputer(UINT
nID)
{
UpdateData();
m_pComputer -> ComputerSet(m_data1,m_data2);
switch(nID)
{
case IDC_ADD:
m_result = m_pComputer ->Add();
break;
case IDC_SUBSTRACT:
m_result = m_pComputer ->Substract();
break;
case IDC_MULTIPLE:
m_result = m_pComputer ->Multiple();
break;
case IDC_DEVIDE:
m_result = m_pComputer ->Devide();
break;
}
UpdateData( false);
if(nID
== IDC_DEVIDE && m_data2 == 0)
{
CEdit *pEdit =( CEdit* ) GetDlgItem(IDC_DEVIDE);
pEdit ->SetFocus();
}
}
void CExtensionTestDlg::OnBnClickedCancel()
{
if(m_pComputer)
{
delete m_pComputer;
m_pComputer = NULL;
}
//
TODO: Add your control notification handler code here
CDialogEx::OnCancel();
}
最后将ExtensionDll.dll文件和ExtensionDll.lib拷贝在当前目录下
再在project->property->linker->input下添加依赖关系

最后编译 运行
