动态链接库
扫描二维码
随时随地手机看文章
动态链接库:DLL(Dynamic Linkable Library)
kernel32.dll处理内存管理和进程调度
user32.dll控制用户界面
gdi32.dll图形处理
win32 dll
mfc dll
#include
#include
using namespace std;
typedef int(*LoadFunc)(int,int);
int main(void)
{
HINSTANCE hInstance;
LoadFunc add;
//加载dll
hInstance=LoadLibrary(L"C:\Documents and Settings\liutao6\桌面\dlld.dll");
if (hInstance!=NULL)
{
add=(LoadFunc)GetProcAddress(hInstance,"Add");//获取函数地址
if (add!=NULL)
{
int result=add(5,2);
cout< } FreeLibrary(hInstance);//释放dll模块 } } extern "C" int __declspec(dllexport) Add(int,int); //导出函数 int Add(int a,int b) { return a+b; } 使用MFC编写的DLL,可以分成两大类: l 规则DLL——规则(regular)DLL中所包含的函数,可以被所有Windows应用程序使用; n 共享MFC——DLL中不包含MFC库函数,需要另外安装MFC动态链接库后才能使用; n 静态MFC——DLL中包含MFC库函数,可以脱离MFC动态链接库独立使用。 l 扩展DLL——扩展(extension)DLL中所定义的类和函数,只能被所MFC应用程序使用。而且扩展DLL中不能包含MFC库函数,也需要另外安装MFC动态链接库后才能使用。 1 扩展DLL 使用MFC编写的扩展DLL,可以导出整个类(从而能使用类中的所有成员,包括数据成员和成员函数),也可以导出指定的若干(成员或全局)函数。 (1)新建MFC扩展DLL (2)添加导出类(MFC类).继承自Cobject.编写代码并运行 AFX_EXT_CLASS intMod(intd1,
int d2);//导出函数声明 class
AFX_EXT_CLASS CCompute :
public CObject//导出类声明 //#define AFX_EXT_CLASS
AFX_CLASS_EXPORT //#define AFX_CLASS_EXPORT __declspec(dllexport) { public: int
m_data1, m_data2; CCompute(); CCompute(intd1,int
d2); virtual ~CCompute(); public: int
Add(); int
Sub(); int
Mul(); double
Div(); }; (3)新建项目MFC应用程序。选中项目名,选中菜单项“项目项目依赖项”,在弹出的“项目依赖项”对话框中,选中“依赖栏”中的 (4)新项目的头文件包含头文件#include "..ExtDllCompute.h" (5)在项目的类中声明对象CCompute *m_pComp; void CExtClientDlg::OnBnClickedAdd() { // TODO:
在此添加控件通知处理程序代码 Comp(IDC_ADD); } void CExtClientDlg::Comp(UINT nID)//参数为按钮标识 { UpdateData(); //动态获取用户输入的数据并赋值给对应的控件变量 m_pComp = new CCompute(m_iData1, m_iData2); //创建计算对象 int r; double dr; switch(nID) { //进行四则和取模运算 case IDC_ADD: r = m_pComp->Add(); break; 。。。 } delete m_pComp; if (nID != IDC_DIV) SetDlgItemInt(IDC_RESULT, r); //显示整数结果 else { //
显示除法所得的实数结果 wchar_t buf[20]; swprintf_s(buf, 20, L"%g", dr); SetDlgItemText(IDC_RESULT, buf); } } 2 规则DLL 使用MFC编写的规则DLL,虽然只能导出函数而不能导出整个类,但是其导出的函数却可以其他被非MFC应用程序所调用。下面我们仍通过上面的四则运算的例子,看看如何用关键字__declspec(dllexport)和extern
"C"来编写和使用导出若干(全局)C函数的规则MFC DLL。 使用共享MFC DLL的规则DLL 也可以选择“带静态链接MFC的规则DLL”,差别是所生成的DLL中会包含MFC库,当然所生成的库文件也会大一些(但因此可不用另外安装MFC动态链接库)。例如,在此例中,选共享MFC所生成的RegDll.dll文件只有13KB大,而选择静态MFC的则有199KB。 规则DLL项目是使用共享MFC还是使用静态MFC,也可以在生成DLL项目之后,通过项目属性对话框的“配置属性常规”页中的“MFC的使用”栏中的下拉式列表选项来切换,这一点与普通MFC应用程序项目的类似。 1.宏定义 #define
DllImport extern
"C" _declspec(dllimport) 2.Cpp文件中加入 DllExport
int Add(intd1,int
d2) { return
d1 + d2;} DllExport
int Sub(intd1,int
d2) { return
d1 - d2;} DllExport
int Mul(intd1,int
d2) { return
d1 * d2;} 3.添加依赖项和头文件方法同上。工程文件cpp中加入 #define
DllImport extern
"C" _declspec(dllimport) DllImport
int Add(intd1,int
d2); DllImport
int Sub(intd1,int
d2); DllImport
int Mul(intd1,int
d2); DllImport
double Div(intd1,int
d2); DllImport intMod(intd1,
int d2); 4.使用函数 Add(m_iData1,m_iData2)