您的位置:首页 > 其它

非MFC DLL的函数,类的导出与调用

2013-11-18 09:59 330 查看
非MFC DLL的导出与调用
Last Edit 2013/11/18
一.DLL的分类
Visual C++ 支持三大DLL
1.非MFC DLL
2.MFC DLL
3.MFC 扩展 DLL

二.生成导出函数DLL

在头文件中加入如下语句:
#ifndef DLLTEST_H
#define DLLTEST_H
extern "C" _declspec(dllexport) add(int a,int b);
#endif

在cpp在加入函数实现代码
#include "DllTest.h"
int add(int a,int b)
{
	return a+b;
}


如果要看函数是否成功导出的话,可以使用用VC++自带的工具Depends



三、动态调用与静态调用
将上面程序所生成的DLL,Lib 文件拷到新建的工程目录下,方便调用。
1.动态调用
所谓的动态调用指的是,程序员可以自主的决定在哪段代码中调用DLL中的函数,释放DLL。该过程主要用到3个Windows API
HMODULE LoadLibrary(libpathName)
FARPROC GetProcAddress(HMODULE hModule, // DLL模块句柄
LPCSTR lpProcName // 函数名)
FreeLibrary(HMODULE)


#include <stdio.h>
#include <windows.h>
typedef int(*lpAddFun)(int ,int); 
void main()
{
	lpAddFun addFun;
	HINSTANCE hDll=LoadLibrary("DllTest.dll");
	if (hDll!=NULL)
	{
		addFun=(lpAddFun)GetProcAddress(hDll,"add");
		if (addFun)
		{
			int res=addFun(1,2);
			printf("%d",res);
		}
	}
	FreeLibrary(hDll);
}
静态调用

#include <stdio.h>
#pragma comment(lib,"DllTest.lib")
extern "C" _declspec(dllimport) add(int,int);

void main()
{
	printf("%d",add(1,4));
}


类的导出
class _declspec(dllexport) className{

....
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: