dll学习
来源:互联网 发布:c语言两个竖线 编辑:程序博客网 时间:2024/06/03 20:53
1、把.lib(连接时用,最终发布时不需要)和.dll放到工程目录下
2、在程序中(比如stdafx.h中)#pragma comment(lib,"xxx.lib")或者工程->设置里添加对象/库模块
3、包含头文件,#include "xxx.h"
完成后,就可以像使用你自己的类或方法一样使用dll了。
-------------------------------------------------分割线------------------------------------------------------
lib和dll文件的区别和联系
.dll是在你的程序运行的时候才连接的文件,因此它是一种比较小的可执行文件格式,.dll还有其他的文件格式如.ocx等,所有的.dll文件都是可执行。.lib是在你的程序编译连接的时候就连接的文件,因此你必须告知编译器连接的lib文件在那里。一般来说,与动态连接文件相对比,lib文件也被称为是静态连接库。当你把代码编译成这几种格式的文件时,在以后他们就不可能再被更改。如果你想使用lib文件,就必须:
1 包含一个对应的头文件告知编译器lib文件里面的具体内容
2 设置lib文件允许编译器去查找已经编译好的二进制代码
如果你想从你的代码分离一个dll文件出来代替静态连接库,仍然需要一个lib文件。这个lib文件将被连接到程序告诉操作系统在运行的时候你想用到什么dll文件,一般情况下,lib文件里有相应的dll文件的名字和一个指明dll输出函数入口的顺序表。如果不想用lib文件或者是没有lib文件,可以用WIN32 API函数LoadLibrary、GetProcAddress。事实上,我们可以在Visual C++ IDE中以二进制形式打开lib文件,大多情况下会看到ASCII码格式的C++函数或一些重载操作的函数名字。一般我们最主要的关于lib文件的麻烦就是出现unresolved symble 这类错误,这就是lib文件连接错误或者没有包含.c、.cpp文件到工程里,关键是如果在C++工程里用了C语言写的lib文件,就必需要这样包含:
extern "C"
{
#include "myheader.h"
}
这是因为C语言写的lib文件没有C++所必须的名字破坏,C函数不能被重载,因此连接器会出错。
---------------------------------------------------------------分割线---------------------------------------------------------------------
写自己的dll
方法一:使用export和import
1、首先创建一个dll的头文件。dll的源码文件(.cpp)需要包含这个头文件,而且使用这个动态连接库的可执行文件也需要这个头文件。这个头文件包含你想要从dll输出的函数的原型、结构和符号。下面是一个名为a.h文件的的例子。
#ifndef A_H_
#define A_H_
#define MYFIRSTDLL extern "C" __declspec(dllimport)
MYFIRSTDLL void ShowText();
#endif
2、然后创建a.cpp.代码如下。
#define MYFIRSTDLL extern "C" __declspec(dllexport)
#include <stdio.h>
#include "a.h"
void ShowText()
...{
printf("This is dll export show. ") ;
}
在Project->setting->link 最下面加上“/dll”,"/"之前有空格,然后编译,就可以在debug或release下面找到dll 和lib文件了。在使用a.dll这个动态连接库的时候,应该把a.h头文件包含在可执行文件中,而且还要把a.lib连入程序。
下面的代码是使用这个动态连接库的测试程序。
#include <stdio.h>
#include <iostream.h>
#include "a.h"
#pragma comment(lib,"a.lib")
int main()
...{
ShowText() ; //这个函数是从动态连接库a.dll中调用的
printf("This is execute show ") ;
return 1;
}
方法二:使用def文件
如上建立2个文件a.h和a.cpp
void ShowText();
#include <stdio.h>
#include "a.h"
void ShowText()
...{
printf("This is dll export show ") ;
}
然后再当前目录下面建立一个.def文件,文件名最好和要输出的dll名字一样,扩展名为.def, 里面写上:
EXPORTS
ShowText @1
然后将这个文件添加到工程中,在link中设置 /dll, 然后编译,在debug或release中就可以找到dll和lib了,使用的时候加上dll.h文件。
例二
int Add (int iLeft, int iRight) ;
int Sub (int iLeft, int iRight) ;
//b.cpp
#include "b.h"
int Add(int iLeft, int iRight)
...{
return iLeft + iRight ;
}
int Sub (int iLeft, int iRight)
...{
return iLeft - iRight ;
}
//b.def
LIBRARY b.dll
EXPORTS
Add @1
Sub @2
//testb.cpp
#include <stdio.h>
#include <iostream.h>
#include "b.h"
#pragma comment(lib,"b.lib")
int main()
...{
int a = Add(1,3);
int b = Sub(5,3);
cout<<a;
cout<<b;
return 1;
}
- dll学习
- dll学习
- DLL学习
- 学习DLL
- dll学习
- DLL学习
- DLL学习---转载
- 学习开发DLL笔记
- DLL学习(资料收集)
- win32 dll学习笔记
- DLL学习开发笔记
- DLL学习---转载
- DLL学习小结
- vc DLL学习
- 调用dll学习中
- VC DLL学习
- 学习:DLL远程注入
- dll编程学习日志
- 天枫常用ASP函数封装
- 基于Ajax的应用程序架构汇总
- 开张了
- 【原创】用Validator框架对页面表单进行验证..
- SOA助推行业解决方案
- dll学习
- 编程的命名规则
- JSP生成验证码源程序
- FORM前后输入框的值比较大小
- gggg
- 基本概念:同步、异步、阻塞和非阻塞
- 默然周记20030413
- 一个简单的酒店系统的数据库设计
- 第一篇