现在的位置: 首页 > 综合 > 正文

手工编写动态链接库

2013年09月24日 ⁄ 综合 ⁄ 共 1474字 ⁄ 字号 评论关闭

如何手工编写动态链接库(windows dll)

  1.本例介绍在命令行(Console)环境下制作dll的方法
  2.读者动手前,请确保在windows中安装有编译、链接工具和必要的函数库文件。
  3.本例使用C语言实现.
  4.本例中使用路径均为我机器上的绝对路径,读者需根据实际情况调整。

  工具要求:

  Microsoft的编译器cl.exe   
  MIcrosoft链接器link.exe

dll制作步骤:
1.编写dll函数实现源代码hello.c

#include   "stdio.h"

int say_hello(char* name)
{
printf( "hello %s\n ", name);
return 1;
}

2.编写dll函数输出定义文件hello.def.

LIBRARY hello
EXPORTS
say_hello @1

3.编译dll源码,生成dll,lib文件.

3.1 新建命令行窗口
3.2 设置PATH INCLUDE LIB 3个环境变量.


说明:

1. 运行cl.exe编译发生:没有找到
mspdb80.dll 的解决办法
,如果安装的是Visual Studio 2005的话,path中包含C:\Program Files\Microsoft Visual Studio 8\Common7\IDE即可

2. e:\dll\hellotest
path中包含生成的hello.dll的路径

3. e:\dll\hellotest
lib中包含生成hello.lib的路径。

SET PATH=c:\Program Files\Microsoft
Visual Studio 8\VC\bin;C:\Program Files\Microsoft Visual Studio 8\Common7\IDE;e:\dll\hellotest\;%PATH%


SET INCLUDE=c:\Program Files\Microsoft
Visual Studio 8\VC\include;%INCLUDE%


SET LIB=c:\Program Files\Microsoft Visual Studio 8\VC\lib;e:\dll\hellotest\;%LIB%

3.3 编译hello.c

cd K:\Source\dllsample (hello.c和hello.def所在目录)
cl /c hello.c   

3.4 链接hello.obj,生成hello.dll,hello.lib两个文件.

link /def:hello.def /dll hello.obj

4.测试dll函数.

4.1 编写测试代码 test.c

extern int say_hello(char* name);
int main(int argc,char** argv)
{
say_hello( "robbie ");
return 0;
}

4.2 编译测试代码test.c

cl /c test.c

4.3 链接test.obj和 hello.lib,生成可执行文件test.exe

link test.obj hello.lib

4.4 运行test.exe,屏幕输出:

hello robbie

至此,一个dll构造完毕.

下面是我自己的一点补充:
  如果要在c++下,或者win32 mfc下使用标准c写的dll,必须把上面的声明

extern int say_hello(char* name);改成:extern
"C " int say_hello(char* name);


文章出自:http://topic.csdn.net/u/20071230/13/8f414a5d-e489-4206-91a3-0bf7d31b784b.html 十二楼

抱歉!评论已关闭.