怎样在WDM驱动中bcb 动态调用dlll库

&&&&DLL动态链接库的实现及调用(VC++,Delphi)
&DLL动态链接库的实现及调用(VC++,Delphi)
该压缩包包括:1.动态链接库(DLL)的编译实例,包括_cdecl和stdcall两种常见函数调用约定的实现,并且解决了名字修改问题,在实例代码中有详细的说明!2.针对不同的函数调用约定,以及动态调用DLL库和静态调用DLL库分别提供了调用实例的源代码和程序!3.压缩包中包括VC++调用DLL的实例源码和Delphi调用DLL的实例源码和说明(利用前面VC++生成的DLL)!4.其中VC++调用DLL实例中还简单说明了计算string的长度,比较,大小写转换等功能实现的方法!
若举报审核通过,可奖励20下载分
被举报人:
举报的资源分:
请选择类型
资源无法下载
资源无法使用
标题与实际内容不符
含有危害国家安全内容
含有反动色情等内容
含广告内容
版权问题,侵犯个人或公司的版权
*详细原因:
VIP下载&&免积分60元/年(1200次)
您可能还需要
Q.为什么我点的下载下不了,但积分却被扣了
A. 由于下载人数众多,下载服务器做了并发的限制。若发现下载不了,请稍后再试,多次下载是不会重复扣分的。
Q.我的积分不多了,如何获取积分?
A. 获得积分,详细见。
完成任务获取积分。
论坛可用分兑换下载积分。
第一次绑定手机,将获得5个C币,C币可。
关注并绑定CSDNID,送10个下载分
下载资源意味着您已经同意遵守以下协议
资源的所有权益归上传用户所有
未经权益所有人同意,不得将资源中的内容挪作商业或盈利用途
CSDN下载频道仅提供交流平台,并不能对任何下载资源负责
下载资源中如有侵权或不适当内容,
本站不保证本站提供的资源的准确性,安全性和完整性,同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
操作系统下载排行
您当前C币:0&&&可兑换 0 下载积分
兑换下载分:&
消耗C币:0&
立即兑换&&
兑换成功你当前的下载分为 。前去下载资源
你下载资源过于频繁,请输入验证码
如何快速获得积分?
你已经下载过该资源,再次下载不需要扣除积分
DLL动态链接库的实现及调用(VC++,Delphi)
所需积分:0
剩余积分:0
扫描微信二维码精彩活动、课程更新抢先知
VIP会员,免积分下载
会员到期时间:日
剩余下载次数:1000
DLL动态链接库的实现及调用(VC++,Delphi)
剩余次数:&&&&有效期截止到:
你还不是VIP会员VIP会员享免积分 . 专属通道极速下载
VIP下载次数已满VIP会员享免积分 . 专属通道极速下载,请继续开通VIP会员
你的VIP会员已过期VIP会员享免积分 . 专属通道极速下载,请继续开通VIP会员114网址导航tianchangxi 的BLOG
用户名:tianchangxi
文章数:12
访问量:1727
注册日期:
阅读量:5863
阅读量:12276
阅读量:381216
阅读量:1073312
51CTO推荐博文
这几天涉及到vc下dll库的调用和创建问题,由于以前没有接触过这方面的知识,所以参考了一些资料。为了方便自己以后参考,将创建及调用的方法做如下记录,如有幸被您发现不足之处希望给予指正:
一、vc++6.0下创建dll动态库(由于本人需求,在这里只介绍MFC规则的DLL库创建方式)
&&& 注:DLL的编制与具体的编程语言及编译器无关,动态链接库随处可见,VC++支持三种DLL:非MFC动态库、MFC规则DLL和MFC扩展DLL。DLL导出函数(或变量、类)可供应用程序调用;DLL内部函数只能在DLL程序内使用,应用程序无法调用它们。
1、打开vc++6.0 &&文件&&新建工程(MFC AppWizard(dll))&&动态链接库使用共享MFC DLL//表示创建一个MFC规则的dll库(详细操作见下图&&创建一个名字为Mydll的动态库)
&2、在创建后的工程中会有一些生成的文件,打开Mydll.def文件(如果无法打开文件,请关闭工程保存后关闭,并重新打开工程),在文件中加入函数名Func_add
3、打开Mydll.h文件中添加:外部函数声明//求和函数,函数名为Add_new
extern &C& __declspec(dllexport) int __stdcall Add_new(int a,int b);
<span style="color: #. 在Myddl.cpp文件中添加: 外部函数实现
extern &C& __declspec(dllexport) int __stdcall Func_add(int a,int b)
&&&& return a+b;
5、组建&&全部重建,会在debug目录下生成一个Mydll.dll文件,到此为止我们的dll库就创建成功了。
二、如何调用动态库
注:调用动态库分为两种方式:一种是静态调用方式,另一种为动态调用方式!本人理解其两者并没有太大的区别。静态调用方式就是只要程序运行就加载动态库到内存中,即使程序运行期间没有用到dll库里的函数也同样加载!动态调用方式是指每次用到dll库中的函数时加载该库,调用结束之后释放内存!理论上将静态调用方式占内存运行快,动态调用方式节省内存,但运行速度稍慢!
1、静态调用方式举例
2、动态调用方式(将生成dll库(Mydll.dll)复制到)
只需要在代码中加入以下几行
HMODULE hL//定义HMODULE类型句柄,加载dll后返回的句柄,可通过该句柄获取函数入口地址
typedef int (__stdcall *fun)(int, int);//定义函数指针类型
//定义一个fun类型的函数指针
hLib = LoadLibrary(&Mydll.dll&);//在需要调用dll中函数代码前加入,表示加载dll库到内存
myadd = (fun) GetProcAddress(hLib, &Func_add&);//获取Func_addr函数的指针
myadd(1,3);//调用该函数
FreeLibrary(hLib);//释放dll库
&谢谢观看^_^
&本文出自 “” 博客,请务必保留此出处
了这篇文章
类别:┆阅读(0)┆评论(0)博客访问: 1616031
博文数量: 335
博客积分: 3901
博客等级: 少校
技术积分: 3620
注册时间:
认证徽章:
黑夜给了我黑色的眼睛,我却用它来寻找“生活”;
IT168企业级官微
微信号:IT168qiye
系统架构师大会
微信号:SACC2013
分类: WINDOWS
&1、简介:
dll和.lib都是程序集合,便于代码重用。都是二进制的文件。
.dll也叫动态链接库,与程序链接的方式为运行时链接(run-time&linked),为PE(portable&executable)格式,也就是程完整的程序。.exe、.dll、.fon、.mod、.drv、.ocx等等都是动态链接库。如.exe为系统调用的函数集合。.dll不存在同名引用,且有导出表,与导入表。
.lib也叫静态链接库,在编译时与程序链接(link-time&linked),将“嵌入”到程序中。会有冗余(程序文件代码的冗余和运行时内存存储的冗余),当两个lib相链接时地址会重新建立同。在使用.lib之前,要在程序源代码中引用lib对应的头文件.h,这些头文件告诉编译器.lib中有什么。
在生成.dll时,通常会生成一个.lib。这个.lib将被编译到程序文件中,在程序运行的时候,告诉操作系统将要加载的.dll。这个.lib包括对应.dll的文件名、顺序表(ordinal&table包含.dll暴露出的函数的进入点),在程序运行的时候,通过顺序表实现函数的跳转。
如果不想使用或者找不到该.lib,可以用LoadLibrary&()&Win32&API和GetLibrary&()&Win32&API。
VC&IDE为了实现程序调试,会生成.PDB(程序数据库,二进制),里面包含源文件调用的文件信息和行信息。这样就可以逐行调试了。
打开.lib,查看其ascii码,可以看到如@@My_Function1123的函数名,这些名称在编译时被编译器运用mangling&mechanism进行了名称的mangling。
在程序的编译过程中,如果出现如下错误“unresolved&symbol&_some_funtion@1234”,通常是因为找不到引用过的外部函数对应的.lib文件,或者是.c、.cpp源文件。
用DLL,首先需要将DLL文件映像到用户进程的地址空间中,然后才能进行函数调用,这个函数和进程内部一般函数的调用方法相同。Windows提供了两种将DLL映像到进程地址空间的方法:
  1、隐式的加载时链接
  这种方法需要DLL工程经编译产生的LIB文件,此文件中包含了DLL允许应用程序调用的所有函数的列表,当链接器发现应用程序调用了LIB文件列出的某个函数,就会在应用程序的可执行文件的文件映像中加入一些信息,这些信息指出了包含这个函数的DLL文件的名字。当这个应用程序运行时,也就是它的可执行文件被操作系统产生映像文件时,系统会查看这个映像文件中关于DLL的信息,然后将这个DLL文件映像到进程的地址空间。
  系统通过DLL文件的名称,试图加载这个文件到进程地址空间时,它寻找DLL 文件的路径按照先后顺序如下:
  ·程序运行时的目录,即可执行文件所在的目录;
  ·当前程序工作目录
  ·系统目录:对于Windows95/98来说,可以调用GetSystemDirectory函数来得到,对于WindowsNT/2000来说,指的是32位Windows的系统目录,也可以调用GetSystemDirectory函数来得到,得到的值为SYSTEM32。
  ·Windows目录
  ·列在PATH环境变量中的所有目录
  VC中加载DLL的LIB文件的方法有以下三种:
  ①LIB文件直接加入到工程文件列表中
  在VC中打开File View一页,选中工程名,单击鼠标右键,然后选中"Add Files to Project"菜单,在弹出的文件对话框中选中要加入DLL的LIB文件即可。
  ②设置工程的 Project Settings来加载DLL的LIB文件
  打开工程的 Project Settings菜单,选中Link,然后在Object/library modules下的文本框中输入DLL的LIB文件。
  ③通过程序代码的方式
   加入预编译指令#pragma comment (lib,"*.lib"),这种方法优点是可以利用条件预编译指令链接不同版本的LIB文件。因为,在Debug方式下,产生的LIB文件是Debug 版本,如Regd.lib;在Release方式下,产生的LIB文件是Release版本,如Regr.lib。
  当应用程序对DLL的LIB文件加载后,还需要把DLL对应的头文件(*.h)包含到其中,在这个头文件中给出了DLL中定义的函数原型,然后声明。
  2、显式的运行时链接
  隐式链接虽然实现较简单,但除了必须的*.dll文件外还需要DLL的*.h文件和*.lib文件,在那些只提供*.dll文件的场合就无法使用,而只能采用显式链接的方式。这种方式通过调用API函数来完成对DLL的加载与卸载,其能更加有效地使用内存,在编写大型应用程序时往往采用此方式。这种方法编程具体实现步骤如下:
  ①使用Windows API函数Load Library或者MFC提供的AfxLoadLibrary将DLL模块映像到进程的内存空间,对DLL模块进行动态加载。
  ②使用GetProcAddress函数得到要调用DLL中的函数的指针。
  ③不用DLL时,用Free Library函数或者AfxFreeLibrary函数从进程的地址空间显式卸载DLL。
调用DLL有两种方法:静态调用和动态调用.
(一).静态调用其步骤如下:
1.把你的youApp.DLL拷到你目标工程(需调用youApp.DLL的工程)的Debug目录下;
2.把你的youApp.lib拷到你目标工程(需调用youApp.DLL的工程)目录下;
3.把你的youApp.h(包含输出函数的定义)拷到你目标工程(需调用youApp.DLL的工程)目录下;
4.打开你的目标工程选中工程,选择Visual C++的Project主菜单的Settings菜单;
5.执行第4步后,VC将会弹出一个对话框,在对话框的多页显示控件中选择Link页。然后在Object/library modules输入框中输入:youApp.lib
6.选择你的目标工程Head Files加入:youApp.h文件;
7.最后在你目标工程(*.cpp,需要调用DLL中的函数)中包含你的:#include "youApp.h"
注:youApp是你DLL的工程名。
(二).动态调用其程序如下:
动态调用时只需做静态调用步骤1.
02&&&&&HINSTANCE&hDllInst&=&LoadLibrary("youApp.DLL");
03&&&&&if(hDllInst)
05&&&&&&&&&typedef&DWORD&(WINAPI*MYFUNC)(DWORD,DWORD);
06&&&&&&&&MYFUNCyouFuntionNameAlias=NULL;
07&&&&&&&&// youFuntionNameAlias 函数别名
08&&&&&&&&youFuntionNameAlias=&(MYFUNC)GetProcAddress(hDllInst,"youFuntionName");
09&&&&&&&&// youFuntionName 在DLL中声明的函数名
10&&&&&&&&&if(youFuntionNameAlias)
11&&&&&&&&{
12&&&&&&&&&&&&youFuntionNameAlias(param1,param2);
13&&&&&&&&}
14&&&&&&&&FreeLibrary(hDllInst);
显式(静态)调用:
LIB + DLL + .H,注意.H中dllexport改为dllimport
隐式(动态)调用:
DLL + 函数原型声明,先LoadLibrary,再GetProcAddress(即找到DLL中函数的地址),不用后FreeLibrary
--------------------------------------
动态链接库DLL的链接
应用程序使用DLL可以采用两种方式:一种是隐式链接,另一种是显式链接。在使用DLL之前首先要知道DLL中函数的结构信息。Visual C++6.0在VC\bin目录下提供了一个名为Dumpbin.exe的小程序,用它可以查看DLL文件中的函数结构。另外,Windows系统将遵循下面的搜索顺序来定位DLL: 1.包含EXE文件的目录,2.进程的当前工作目录, 3.Windows系统目录, 4.Windows目录,5.列在Path环境变量中的一系列目录。
(一).隐式链接
隐式链接就是在程序开始执行时就将DLL文件加载到应用程序当中。实现隐式链接很容易,只要将导入函数关键字_declspec(dllimport)函数名等写到应用程序相应的头文件中就可以了。下面的例子通过隐式链接调用MyDll.dll库中的Min函数。首先生成一个项目为TestDll,在 DllTest.h、DllTest.cpp文件中分别输入如下代码:
01&//Dlltest.h
02&&&&&#pragma comment(lib,"MyDll.lib")
03&&&&&extern&"C"_declspec(dllimport)intMax(inta,int&b);
04&&&&&extern&"C"_declspec(dllimport)intMin(inta,int&b);
05&//TestDll.cpp
06&#include
07&#include"Dlltest.h"
08&voidmain()
10&&&&&int&a;
11&&&&&a=min(8,10)
12&&&&&printf("比较的结果为%d\n",a);
在创建DllTest.exe文件之前,要先将MyDll.dll和MyDll.lib拷贝到当前工程所在的目录下面,也可以拷贝到windows的 System目录下。如果DLL使用的是def文件,要删除TestDll.h文件中关键字extern "C"。TestDll.h文件中的关键字Progam commit是要Visual C+的编译器在link时,链接到MyDll.lib文件,当然,开发人员也可以不使用#pragma comment(lib,"MyDll.lib")语句,而直接在工程的Setting->Link页的Object/Moduls栏填入 MyDll.lib既可。
编程时用ad.h,ad.lib,放在项目当前目录里
在头文件中加入#include "ad.h"
在Project Setting–>Link–>Object/library modules加入ad.lib
执行时将ad.dll跟你的程序放在同一目录
(二).显式链接
显式链接是应用程序在执行过程中随时可以加载DLL文件,也可以随时卸载DLL文件,这是隐式链接所无法作到的,所以显式链接具有更好的灵活性,对于解释性语言更为合适。不过实现显式链接要麻烦一些。在应用程序中用LoadLibrary或MFC提供的AfxLoadLibrary显式的将自己所做的动态链接库调进来,动态链接库的文件名即是上述两个函数的参数,此后再用GetProcAddress()获取想要引入的函数。自此,你就可以象使用如同在应用程序自定义的函数一样来调用此引入函数了。在应用程序退出之前,应该用FreeLibrary或MFC提供的AfxFreeLibrary释放动态链接库。下面是通过显式链接调用DLL中的Max函数的例子。
01&#include
02&#include
03&voidmain(void)
05&&&&&typedef&int(*pMax)(inta,int&b);
06&&&&&typedef&int(*pMin)(inta,int&b);
07&&&&&HINSTANCE&hDLL;
08&&&&&PMax&Max
09&&&&&HDLL=LoadLibrary("MyDll.dll");//加载动态链接库MyDll.dll文件;
10&&&&&Max=(pMax)GetProcAddress(hDLL,"Max");
11&&&&&A=Max(5,8);
12&&&&&Printf("比较的结果为%d\n",a);
13&&&&&FreeLibrary(hDLL);//卸载MyDll.dll文件;
在上例中使用类型定义关键字typedef,定义指向和DLL中相同的函数原型指针,然后通过LoadLibray()将DLL加载到当前的应用程序中并返回当前DLL文件的句柄,然后通过GetProcAddress()函数获取导入到应用程序中的函数指针,函数调用完毕后,使用 FreeLibrary()卸载DLL文件。在编译程序之前,首先要将DLL文件拷贝到工程所在的目录或Windows系统目录下。
使用显式链接应用程序编译时不需要使用相应的Lib文件。另外,使用GetProcAddress()函数时,可以利用 MAKEINTRESOURCE()函数直接使用DLL中函数出现的顺序号,如将GetProcAddress(hDLL,"Min")改为 GetProcAddress(hDLL, MAKEINTRESOURCE(2))(函数Min()在DLL中的顺序号是2),这样调用DLL中的函数速度很快,但是要记住函数的使用序号,否则会发生错误。
MFC&dll&生成和使用
VC中生成DLL的办法见:
--------------------------------------
VC中使用DLL
课题来源: 为了实现将串口传上来的数据作图,在网上下载了一个CLPLOT的封装类。
问题:该分装类就像是一个控件,可以灵活调用。但是,存在一个问题,就是不知道如何快捷的生成exp,lib,dll文件。
解决方法:
?&&&&&&&&&打开工程,第一步,我们需要生成lib,exp文件。打开project->settings,出现如图(1)对话框。在link选项里,将output file name 修改为:xxx.lib,Object/library modules 空出。OK之后,直接build,运行,然后就会生成exp,lib文件,结果如下:
“Creating library Debug/clPlot.lib and object Debug/clPlot.exp“
于是便在debug里面成功生成了exp,lib文件。&
?&&&&&&&&&接着我们需要生成dll文见。将exp,lib文件从debug文件夹中拷贝出来(也可以不考,修改link中相应的路径即可),放到工程目录下面。
?&&&&&&&&&打开project->settings,出现如图(2)对话框。在link选项里,将output file name 修改为:Debug/xxx.dll(注意:一开始我只写了XXX.dll,找不到dll文件,最好具体点),Object/library modules 中直接写lib的路径。在这里,由于已经考到工程目录下,所以直接写xxx.lib即可。&
?&&&&&&&&&Build,运行,即可生成DLL文件。
?&&&&&&&&&然后就可以通过使用exp,ib,dll, .h文件,就可以使用自己创建的类,控件。&
(其实直接在工程中建立的时候,选择MFC AppWizard[dll]既可以通过bulid生成dll,lib,exp文件。
“Creating library Debug/dllTest.lib and object Debug/dllTest.exp“)
阅读(18761) | 评论(0) | 转发(0) |
相关热门文章
给主人留下些什么吧!~~
请登录后评论。查看: 4587|回复: 23
订单智能系统,html5风格,支持动态调用dll库.对dll不是很懂的可以学习下
阅读权限50
在线时间 小时
签到天数:9 天
是否带模块:
调用了模块
本帖最后由 宇智波·佐助 于
10:49 编辑
软件是之前店里需要,闲着蛋疼就不知不知觉写出来这东西。懒人只会想出如何用快捷的方法去做。
软件功能如下:
1、支持定时提醒下单。
2、自带通讯录功能。
3、智能分类订单,免得分单麻烦,有效的控制成本问题。
4、智能备份(以前考虑过备份的自己的服务器,随时可以查看,以免漏单可以查询)
5、每日订单,仅需输入数量,不用输入文字。(菜鸟一看就会。)
6、支持订单定向发送指定供应商(目前只有QQ功能,其他暂时没写。。。)
7、打印订单(一目了然)
因为不能开发商业版。所以拿出来分享了。大神就别喷了。现在软件越来越少做。基本都奔向php、asp语言去了。
界面只是调用了天蓝皮肤。其他是自己配搭的。
因为附件比较大,我已经打包到百度网盘了。
喜欢的朋友去我的百度网盘下载。
(154.13 KB, 下载次数: 0)
16:56 上传
订单管理页面
(80.91 KB, 下载次数: 0)
16:56 上传
通讯录管理页面
(113.83 KB, 下载次数: 0)
16:56 上传
货品管理页面
支持开源~!感谢分享
感谢发布原创作品,精易因你更精彩!
您可以选择打赏方式支持楼主
支持开源~!感谢分享
小小心意,意思一下
本帖被以下淘专辑推荐:
& |主题: 185, 订阅: 82
& |主题: 1, 订阅: 0
阅读权限70
在线时间 小时
签到天数: 14 天结帖率: (0/1)
挺好的,分享是一种美德,谢谢
阅读权限30
在线时间 小时
签到天数: 22 天结帖率: (0/2)
感谢开源,,,,,,,
阅读权限30
在线时间 小时
签到天数: 15 天
不错不错哈厉害
阅读权限30
在线时间 小时
签到天数: 2 天
学习了,感谢分享!
阅读权限10
在线时间 小时
结帖率: (1/1)
谢谢楼主分享
阅读权限70
在线时间 小时
结帖率: (1/2)
支持开源。。谢谢
阅读权限10
在线时间 小时
谢谢分享& & 受益了
阅读权限10
在线时间 小时
学习一下··· 谢谢
阅读权限30
在线时间 小时
签到天数: 16 天
学习一下··· 谢谢
拒绝任何人以任何形式在本论坛发表与中华人民共和国法律相抵触的言论,本站内容均为会员发表,并不代表精易立场!
揭阳精易科技有限公司申明:我公司所有的培训课程版权归精易所有,任何人以任何方式翻录、盗版、破解本站培训课程,我们必将通过法律途径解决!
公司简介:揭阳市揭东区精易科技有限公司致力于易语言教学培训/易语言学习交流社区的建设与软件开发,多年来为中小企业编写过许许多多各式软件,并把多年积累的开发经验逐步录制成视频课程供学员学习,让学员全面系统化学习易语言编程,少走弯路,减少对相关技术的研究与摸索时间,从而加快了学习进度!
防范网络诈骗,远离网络犯罪
违法和不良信息举报电话,企业QQ: ,邮箱:
Powered by
粤公网安备 25}

我要回帖

更多关于 vc动态调用dll 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信