dll动态调用

dll项目:

//MyDll2.dll

#include "windows.h"

#include "stdio.h"



int _stdcall add(int a,int b){

	return a+b;

}



int _stdcall substract(int a,int b){

	return a-b;

}

//////////////////////////////////////////////////////////////////

//MyDll2.def--模块定义文件



LIBRARY MyDll2

EXPORTS

add

substract

Client项目:

//Client.cpp

//...

void CMyDllTestDlg::OnButtonSubstract() 

{

/*

	CString str;

	str.Format("5-3=%d",substract(5,3));

	MessageBox(str);

	*/

	HMODULE hIns = LoadLibrary("MyDll2.dll");

	if(!hIns){

		MessageBox("动态链接库加载失败");

		return ;

	}

	typedef int (_stdcall * FUN_ADD)(int,int);

	FUN_ADD add;

	add =(FUN_ADD)GetProcAddress (hIns,"substract");

	if(!add){

		MessageBox("函数地址获取失败");

		return ;

	}

	CString str;

	str.Format("5+3=%d",add(5,3));

	MessageBox(str);

	FreeLibrary(hIns);

}

//...

dll调用方式:动态加载,隐式链接。

隐式链接也是用LoadLibrary去加载,故动态加载效率高,且用dumpbin -exports *.dll查看不到依赖函数,但编程较繁琐。

你可能感兴趣的:(dll)