dll文件生成使用

本文详细介绍了DLL文件的生成过程,包括在Windows环境下使用vc编译器创建Non-MFC DLL的两种方法:通过_declspec(dllexport)关键字和 DEF 文件。同时,文章讨论了DLL的隐式链接和显式链接,并给出了使用示例。最后,讨论了C++与C导出接口的优缺点,以及ACE库链接失败的解决方法。
摘要由CSDN通过智能技术生成


dll文件生成

    vc编译器与gcc的编译原理是一样的,个别的函数像printf可能编译结果不大一样。程序生成的基本过程就是编译,链接。编译大体上也分三部分,预处理,编译,汇编,因为编译过程最复杂,所以这三步一般合起来叫编译。以前的有讨论过http://blog.csdn.net/ysu108/article/details/7529273。每个.cpp文件在windows都会生成一个obj目标文件,头文件不参与编译(在vc下头文件右击是灰色的),只有在链接的时候与库一起生成可执行文件。

    动态链接在Linux下是.o文件,在windows就是dll文件,原理和作用是一样的,使用动态链接库的优点上面的文章也说过,msdn上也有提到http://msdn.microsoft.com/zh-cn/library/dtba4t8b(v=vs.80).aspx。一些常用的dll库一般放在C:\WINDOWS\system32下,如果想注册一个dll可以拷贝一份,然后regsvr32命令注册一份。注册时候要注意dll所在目录是不可以有中文的,如果dll错误,那么有两种情况,版本不对和dll文件缺失。

使用ace库时候链接出现问题,dll文件和头文件都有了,链接的时候LNK2001:unresolved external symbol错误,查了下感觉自己不清楚dll文件的生成原理,自己操作下如何生成dll文件。

微软的Visual C++支持三种DLL,它们分别是Non-MFC Dll(非MFC动态库)、Regular Dll(常规DLL)、Extension Dll(扩展DLL)。Non-MFC DLL指的是不用MFC的类库结构,直接用C语言写的DLL,其导出的函数是标准的C接口,能被非MFC或MFC编写的应用程序所调用。Regular DLL和的Extension Dlls一样,是用MFC类库编写的。

我们已经知道DLL是包含若干个函数的库文件,应用程序使用DLL中的函数之前,应该先导出这些函数,以便供给应用程序使用。要导出这些函数有两种方法,一是在定义函数时使用导出关键字_declspec(dllexport),另外一种方法是在创建DLL文件时使用模块定义文件.Def。需要读者注意的是在使用第一种方法的时候,不能使用DEF文件。下面通过两个例子来说明如何使用这两种方法创建DLL文件。

1)使用导出函数关键字_declspec(dllexport)创建MyDll.dll,该动态链接库中有两个函数,分别用来实现得到两个数的最大和最小数。在MyDll.h和MyDLL.cpp文件中分别输入如下原代码:
 

//MyDLL.h
extern "C" _declspec(dllexport) int Max(int a, int b);
extern "C" _declspec(dllexport) int Min(int a, int b);
//MyDll.cpp
#include
#include"MyDll.h"
int Max(int a, int b)
{
	if(a>=b)return a;
	else
	return b;
}
int Min(int a, int b)
{
	if(a>=b)ret
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值