Chinaunix首页 | 论坛 | 博客
  • 博客访问: 425845
  • 博文数量: 116
  • 博客积分: 7087
  • 博客等级: 少将
  • 技术积分: 1175
  • 用 户 组: 普通用户
  • 注册时间: 2005-02-19 23:32
文章分类

全部博文(116)

文章存档

2012年(1)

2011年(2)

2010年(10)

2009年(21)

2008年(18)

2007年(12)

2006年(21)

2005年(31)

我的朋友

分类: C/C++

2006-05-31 14:14:02

   用VC 2005 Express可以做和以前VC 6一样的事情,今天就谈谈如何编写动态库.
   VC 2005 Express提供了一个dll的创建向导,利用它可以产生动态库模版.在这个模版的基础上,依样画葫芦,就可以完成自己的功能了.
 
   如何产生模版,这里就略去不提了,接下来只谈谈一些技巧.
   技巧一:如何简化程序
   动态库中的函数如何被外部程序使用呢?这里有2种方式.
   方式一:通过__declspec(dllexport) functionname 的方式里将该函数导出.
   方式二:通过定义def文件将函数导出.
 
   例子:
   假设有以下函数,其声明方式如下:
   int foo(void);
 
   采用方式一的时候,要在头文件,和c文件中这么写:
   __declspec(dllexport) int foo(void)
 
   采用方式二的时候,在头文件和c文件中的写法:
   int foo(void);
   (即没有任何变化)
   添加一个def文件,文件名可以随便定,比如此处用foo.def,其内容为:
   EXPORTS
   foo @1
   
   相比而言,两种方法是等效的,但是后者更加简单和清楚.后者不需要修改源码和头文件,而且还可以在def文件中指出函数的顺序号.
   如果使用后者,要在编译的时候指出用哪个def文件.这个可以在项目的属性中指定.具体菜单为:项目->属性->配置属性->连接器->输入->模块定义文件中填上对应文件名即可。
   命令行就采用:/DEF:"foo.def"
  
  
  
阅读(1267) | 评论(1) | 转发(0) |
给主人留下些什么吧!~~

chinaunix网友2009-07-13 11:03:53

多谢版主提供技术信息。