VC6中调用.dll文件中的函数
如果你想快速查看调用.dll文件中函数的方法,请直接从“开始”看起。
照例,首先是一段废话化:
花了尽两天时间,我终于搞清楚如何调用dll文件中的函数了,兴奋之情易于言表啊,这里首先感谢下史磊同学,还有百度上认识的whu_yang兄,感谢你们对我在解决这一问题上的帮助。
先声明下,我此前从未涉及过Windows下的编程,所以对于懂了这么点东西就要写篇文章,大家可不要鄙视啊。
实际上,写这篇文章的最主要原因是,我觉得调用.dll文件里的函数应该是个很简单,很常规的用法,可是遗憾的是,我就查这么点东西,可以说是费尽了周折,足足耗了将尽两天的时间在网上“漫游”,到是也有很多人写过类似的东西,但是,很遗憾,也许是因为他们觉得的太简单而不想多罗嗦吧,我到最后愣是没有找到能看懂的。难道像我这样的初学者,就为了搞清楚这么一点东西,还要系统的学一遍Windows不成?!
You Must:
似乎只要懂得基本的C语言就能看懂这篇文章了吧。
本文主要写给,像我这样的,很少编写Windows下程序的程序员或者工程师们的。因此你不需要懂得Windows,不需要懂得VC6,只要知道基本的C就够了。
Total:
看了很多文章,包括MSDN上得文档,讲了很多关于dll的东西,一会儿有连什么API呀、COM呀、MFC呀的都出来了。晕~真晕,我就是想知道怎么调用.dll文件里的函数,真的有这么难吗?在这里,我不想拷贝粘贴有关“隐式链接”“显式链接”的概念,我只想分下面两种情况讲解:
开始
一、对于已有.lib和.h文件的情况
// This is anexample of an exported variable
DLL_1_API int nDLL_1=0;
// This is anexample of an exported function.
DLL_1_API int fnDLL_1(void)
{
}
// This is theconstructor of a class that has been exported.
// see DLL_1.h for the class definition
CDLL_1::CDLL_1()
{
}
我们将这几行范例通通删掉,替换为我们自己的代码:
DLL_1_API intfTest()
{
}
// This class isexported from the DLL_1.dll
class DLL_1_API CDLL_1 {
public:
};
extern DLL_1_APIint nDLL_1;
DLL_1_API intfnDLL_1(void);
这些实际上就是上面提到的三个范例的声明,当然我们把它替换成我们的代码:
DLL_1_API intfTest(void);
#include"iostream.h"
#include "DLL_1.h"
void main()
{
}
在Link选项卡中的"Object/library modules:"的最后,添加上"DLL_1.lib",注意用空格与前面的lib隔开。然后单击OK按钮。
哈哈~这个“253”意味着什么?
当然,同样的,关于DLL中变量和类的调用,我想应该是大同小异吧。
二、对于,仅有.dll文件的情况
实际上,我这次遇到的问题就是属于这种类型的,查的我好苦啊,现在终于解决了。 :)
当然,.dll文件在被提供时,应该也同时提供了一个说明文档,文档中应该已经给出了你可以调用的函数的功能及函数原型。如果他没有提供函数原型,那还需要一些手段来获得它,有关获取函数原型的方法,本文不做讨论。
这里首先给出我拿到的dll文件及其中的可被调用的函数原型:
kingvewcliend.dll(这个是DLL文件的文件名)中可被调用的函数有:
1、int ReadItemNo();
返回值:
返回组态王OPC中列出的项目总数
2、int StartCliend(char* node);
入口参数:
node为机器节点名称
返回值:
返回建立连接错误码
=======================================
和上面讲的(一、(二)2.~3.)相同,先建立好控制台工程和cpp文件,然后输入下面的代码:
#include"stdio.h"
#include "windows.h"
void main()
{
}
在编译、链接、运行之前,一定要记着先把kingvewcliend.dll文件拷贝到工程文件夹内。
函数的方法:
与上面int ReadItemNo();函数不同的是,int StartCliend(char* node);函数带了参数,怎么办呢?研究下下面的代码,你就明白了! :)
#include"stdio.h"
#include "windows.h"
void main()
{
}