有关dll文件

Xx哼哼xX 2010-01-20 03:06:47
有个概念叫动态连接,还有个库叫动态链接库,貌似功能很强大的东东。

不知道哪位帮我好好讲讲这东西的用法和优点?(最好可以给我贴一个简单的代码,用代码说明比较好!)

另外,如何用BCB创建自己的动态链接库?
...全文
84 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
d52787790 2010-03-06
  • 打赏
  • 举报
回复
mark 以后好 学习下
jjyyhema 2010-01-23
  • 打赏
  • 举报
回复
动态链接对应于静态链接,都是要用到动态链接库dll.
动态链接后的程序dll是在exe外面的,又比较灵活。静态链接后的程序是直接包装在exe文件里面的。
动态链接库的好处,主要是方便代码移植。

davidspower 2010-01-21
  • 打赏
  • 举报
回复
和正常的执行程序一样,只要“File->new”一个“Dynamic-link library”工程,写好代码,Build后在Debug目录或Release目录下就有.dll文件与.lib文件了。这个lib文件就可以导入到其它工程中使用。在写dll代码时要注意要把使用的函数用extern "C" __declspec (dllexport)导出来。
Xx哼哼xX 2010-01-21
  • 打赏
  • 举报
回复
不知道有没有人会用BCB编译.dll和.lib文件的,在线等待答复!
Xx哼哼xX 2010-01-21
  • 打赏
  • 举报
回复
谢谢啊!
Behard 2010-01-21
  • 打赏
  • 举报
回复
其实如果完全不会的话,还是建议先看看书先
xiaotu818 2010-01-20
  • 打赏
  • 举报
回复
首先声明这是我第一次在CSDN上回答帖子,如果答得不好见谅!
我刚好最近也在学习DLL和LIB的创建,我把找到的几个网址发给你吧,希望有用,不过都是在VC6.0开发环境下用的,你说的BCB我还真不知道是个啥?
(1)http://hi.baidu.com/bigccyy/blog/item/bbf86963d45f43600d33fa08.html
(2)http://hi.baidu.com/zhaokaien/blog/item/cabf682ccac049ee8a1399eb.html
(3)http://blog.sina.com.cn/s/blog_50a0aa5e0100g88t.html~type=v5_one&label=rela_nextarticle
(4)http://hi.baidu.com/opaquefog/blog/item/774550fb0c7970136d22ebd4.html
(5)http://support.microsoft.com/kb/117428/zh-cn

代码我只能给出在VC6.0下的生成的说明,不知道你需要不?需要的话打开我的博客:
http://hi.baidu.com/jennifer_818/blog/item/eba30e4461a3ba34879473bc.html

具体的动态链接库的好处,我还是在此处贴出给出你一个简单的说明:
下文摘自:http://hi.baidu.com/bigccyy/blog/item/bbf86963d45f43600d33fa08.html
lib和dll文件的区别和联系2006-09-23 21:09lib和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函数不能被重载,因此连接器会出错。

===============================

在VC中不用MFC如何制作dll

方法一:使用export 和 import

在VC中建立一个Console Application,建立2个文件:Dll.h 和 Dll.cpp

Dll.h

#ifdef MYLIBAPI
#else
#define MYLIBAPI extern "C" _declspec (dllimport)
#end if

MYLIBAPI int Add (int iLeft, int iRight)
MYLIBAPI int Sub (int iLeft, int iRight)

Dll.cpp

#define MYLIBAPI extern "C" _declspec (dllexport)

#include "Dll.h"

int Add (int iLeft, int iRight)
{
return iLeft + iRight ;
}

int Sub (int iLeft, int iRight)
{
return iLeft - iRight ;
}

保存文件。
在Project->setting->link 最下面加上 “/dll”, "/"之前一定要与前一项
有空格。
然后编译,就可以在debug 或 release下面找到dll 和 lib 文件了
使用的时候包含dll.h文件

方法二:使用def文件
建立一个console application, 建立2个文件dll.h 和 dll.cpp

Dll.h

int Add (int iLeft, int iRight) ;
int Sub (int iLeft, int iRight) ;

Dll.cpp

#include "Dll.h"

int Add (int iLeft, int iRight)
{
return iLeft + iRight ;
}

int Sub (int iLeft, int iRight)
{
return iLeft - iRight ;
}

然后再当前目录下面建立一个.def文件,文件名最好和要输出的dll名字一样,扩展名
为.def, 里面写上:

LIBRARY dllname.dll
EXPORTS
Add @1
Add @2
然后将这个文件添加到工程中,
在link中设置 /dll, 然后编译
在debug或release中就可以找到dll和lib了
使用的时候加上dll.h文件

Xx哼哼xX 2010-01-20
  • 打赏
  • 举报
回复
自己顶一下,在线等待!

1,221

社区成员

发帖
与我相关
我的任务
社区描述
C++ Builder Windows SDK/API
社区管理员
  • Windows SDK/API社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧