当前位置: 编程技术>c/c++/嵌入式
VC6.0如何创建以及调用动态链接库实例详解
来源: 互联网 发布时间:2014-10-11
本文导语: 小弟在公司的职责,在上篇博客中已经简约介绍。这边博客主要介绍技术的应用而不在细究原理。因为公司项目着急,出结果要紧,并且咱也不是专注搞研究的,所以,基本懂了原理后,直接上手工作,搞出demo来最好。 至于...
小弟在公司的职责,在上篇博客中已经简约介绍。这边博客主要介绍技术的应用而不在细究原理。因为公司项目着急,出结果要紧,并且咱也不是专注搞研究的,所以,基本懂了原理后,直接上手工作,搞出demo来最好。
至于公司工作情况,今天暂且略过,当然也不是一两句能够表达清楚的。后面会有相应的工作总结,敬请期待……
现在,废话少说,直奔主题——VC6.0中创建动态链接库。
作为客户与后台的中介,为了更好的调节两方的关系,我明智滴选择了webservice以及动态链接库。在与客户c++使动态链接库方式,而与后台java,使用webservice来交流沟通。
既然有了动态链接库,肯定大家会想到静态链接库。呵呵,这个是相对的。那这两者有什么区别呢?那又为什么选择了动态链接库呢?
静态链接库:是把lib文件也打包到了exe文件中。
动态链接库:没有把lib文件打包到exe文件中,若是使用,则直接加载卸载相应的dll文件。
并且,静态链接库中不允许包含静态链接库和动态链接库,而动态链接库中是允许包含静态链接库和动态链接库的。因为小弟封装的dll中是调用客户的dll,并且有可能包含另外自己的动态链接库。
鉴于此,小弟选择了动态链接库。
还有一点是,动态链接库,也是分为三种情况的。一是非MFC的dll(也就是控制台的dll),二是常规的MFC的dll(其中又分静态的dl和共享的dll),三是扩展的MFC 的dll。并且MFC的dll可以被MFC程序或者控制台程序调用。
因为小弟封装的dll,需要供MFC程序调用,所以选择使用了MFC常规的dll。并且使用控制台程序做测试。
首先,在新建工程中选择MFC AppWizard (dll)
然后在头.h文件中,声明被外界调用的函数
extern "C" _declspec(dllexport) char* queryFunctionByFID(char* funcId);
声明后,在cpp文件中,实现此函数。
char* queryFunctionByFID(char* funcId)
{
…………………………
具体的操作实现}
编译,build生成。OK,在Debug下生成相应的dll,至此动态链接库生成了。然后程序就可以直接使用此dll文件了。
然后呢。把dll文件copy到相应的测试dll程序(调用dll的程序)下。使用方式如下:
我测试dll程序中,是使用的控制台程序,这样简单方便,当然使用MFC程序也可以。
比如:我们新建一个控制台程序,然后在main方法中,写如下:
//声明函数指针 写明函数参数个数,参数类型以及返回值类型
typedef char* (* queryFunctionByFID)(char*);
//加载动态链接库,返回DLL文件的句柄
HINSTANCE hDLL=NULL;
//加载动态链接库,dll名称要与刚才生成的dll名称保持一致。
hDLL=LoadLibrary("IProcessInstIn.dll");
queryFunctionByFID saveProcess=NULL;
//加载动态链接库中相应的函数
saveProcess=(queryFunctionByFID)GetProcAddress(hDLL,"queryFunctionByFID");
//真正的调用相应的函数
cout
至于公司工作情况,今天暂且略过,当然也不是一两句能够表达清楚的。后面会有相应的工作总结,敬请期待……
现在,废话少说,直奔主题——VC6.0中创建动态链接库。
作为客户与后台的中介,为了更好的调节两方的关系,我明智滴选择了webservice以及动态链接库。在与客户c++使动态链接库方式,而与后台java,使用webservice来交流沟通。
既然有了动态链接库,肯定大家会想到静态链接库。呵呵,这个是相对的。那这两者有什么区别呢?那又为什么选择了动态链接库呢?
静态链接库:是把lib文件也打包到了exe文件中。
动态链接库:没有把lib文件打包到exe文件中,若是使用,则直接加载卸载相应的dll文件。
并且,静态链接库中不允许包含静态链接库和动态链接库,而动态链接库中是允许包含静态链接库和动态链接库的。因为小弟封装的dll中是调用客户的dll,并且有可能包含另外自己的动态链接库。
鉴于此,小弟选择了动态链接库。
还有一点是,动态链接库,也是分为三种情况的。一是非MFC的dll(也就是控制台的dll),二是常规的MFC的dll(其中又分静态的dl和共享的dll),三是扩展的MFC 的dll。并且MFC的dll可以被MFC程序或者控制台程序调用。
因为小弟封装的dll,需要供MFC程序调用,所以选择使用了MFC常规的dll。并且使用控制台程序做测试。
首先,在新建工程中选择MFC AppWizard (dll)
然后在头.h文件中,声明被外界调用的函数
代码如下:
extern "C" _declspec(dllexport) char* queryFunctionByFID(char* funcId);
声明后,在cpp文件中,实现此函数。
代码如下:
char* queryFunctionByFID(char* funcId)
{
…………………………
具体的操作实现}
编译,build生成。OK,在Debug下生成相应的dll,至此动态链接库生成了。然后程序就可以直接使用此dll文件了。
然后呢。把dll文件copy到相应的测试dll程序(调用dll的程序)下。使用方式如下:
我测试dll程序中,是使用的控制台程序,这样简单方便,当然使用MFC程序也可以。
比如:我们新建一个控制台程序,然后在main方法中,写如下:
代码如下:
//声明函数指针 写明函数参数个数,参数类型以及返回值类型
typedef char* (* queryFunctionByFID)(char*);
//加载动态链接库,返回DLL文件的句柄
HINSTANCE hDLL=NULL;
//加载动态链接库,dll名称要与刚才生成的dll名称保持一致。
hDLL=LoadLibrary("IProcessInstIn.dll");
queryFunctionByFID saveProcess=NULL;
//加载动态链接库中相应的函数
saveProcess=(queryFunctionByFID)GetProcAddress(hDLL,"queryFunctionByFID");
//真正的调用相应的函数
cout
您可能感兴趣的文章:
本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。
本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。
站内导航:
特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!