<!--StartFragment-->
如果你想要自己编写的动态库可以适用更多的其它编程语言,你可以使用定义文件和WINAPI宏来编写自己的API动态库。你将会发现,使用这样的动态库输出函数就象使用API函数一样。
一、为什么要使用DEF文件?
因为微软的MFC动态库都是使用DEF文件创建的。
这回答够有份量吧,但有点大帽子压人的感觉。下面呢,我从原理上来说说为什么要使用DEF文件。
无论使用C语言或者C++语言来编写动态库,其编译器都会为每个函数甚至变量生成一个对应的修饰名(我是这样翻译的。原文是the decorated names),连接器将编译后的目标代码连接成DLL,其输出函数名或变量名依旧是编译后的修饰名。并且修饰名是与编译器相关的,也就是说你的源程序是C,生成的修饰名是一个样子;如果你的源程序是C++,则生成的修饰名是另一种样子。(关于修饰名的讨论,我将放在一个单独的章节进行,敬请等待。粮草未动,广告先行。真是的....)而我们的应用习惯是直接使用函数名,而非修饰名,我们在用API时一直就是如此。那么,问题就来了,比如你在VB6中使用VC6写的动态库:你先在VB6中使用函数名来描述你要调用的函数,然后写好调用代码,接下来运行,你的VB6这时会告诉你,它在动态库中找不到你刚刚描述过的函数的入口点,你的程序拒绝执行了。怎么办?解决问题的方法至少有两种:1、修改你的VB6代码中对动态库输出函数的描述部分,在别名栏添加动态库输出函数的修饰名。2、修改你的动态库,添加一个DEF文件,并使用DEF文件的EXPORTS项来输出你的动态库函数(在其下简单地列出你要输出的函数名即可)。虽然,这样一来问题是解决了(还没有解决?可能吗?有可能啦。但这里先停一下,随后再说。),但我们有必要将该问题进一步讨论下去。我们写动态库的目的大多是想让我们的动态库不局限于某一种编程语言,是为了更加广泛地被应用,我是喜欢用VB写界面,而用VC来完成更重要的工作,如对数据进行分析、访问硬件端口等,而且V
使用定义文件和WINAPI宏编写自己的API动态库
最新推荐文章于 2024-04-22 20:23:47 发布