- 1、本文档共19页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
在vb中调用dl的方法
1 制作好DLL之后,就可以用VB调用它,实现VB调用C程序。VB程序要使用DLL中的函数,首先必须要有特殊的声明,用Declare声明语句在窗体级或模块级或全局模块的代码声明段进行声明,将动态链接库中的函数声明到VB中,供VB程序调用。
语句格式为:Declare Sub 过程名Lib [ Alias 别名]([ByVal 参数AS类型]),或为Declare Function函数名Lib [Alias 别名]([ByVal 参数AS类型])AS类型在声明中首先用Declare关键字表示声明DLL中的函数。在C语言中有的函数类型为VOID,它表示不具有返回值,则必须用关键字Sub将其声明成过程。有的函数具有返回值,则必须用关键字Function将其声明成函数,并且在声明语句的最后要用AS关键字指明函数返回值的类型。
例如上面的ADD.DLL在VB中就可以声明为:
Declare Function ADD Lib “c:\ADD.dll” ByVal X AS Integer, ByVal Y AS Integer ,ByVal filein asstring)AS Integer
通过此声明语句将函数ADD声明到VB中,便可直接调用。
2、dll文件中的函数好像是C语言写的,
// 函数名:int __stdcall GetMacNo int *MacNo
// 功能:获取卡机的卡机号 单机时
// 参数: MacNo[0]-被读出的卡机号
// 返回值:0-成功,
// 2-PC接收超时,
// 3-应答错误
dll的文件名是COMM232.dll
函数的形参int *MacNo是指针吗?
在VB中应该怎么声明和调用该函数?
VB里也可以定义指针吗?
问题补充:vb调用dll文件中的函数我是会的,但这儿的形参有一个星号才不知是怎么一回事,
我是这样声明的对吗?
Public Declare Function GetMacNo Lib COMM232.dll ByVal MacNo As Integer As Integer
又应该怎么调用呢?要先定义一个指针的变量再传给*MacNo还是要怎么做?
都说了MacNo是被读出的卡机号,那么就是传址的了。
dim l as integer
dim m as integer
l GetMacNo m
if l 0 then label1.caption 卡机号: m
elseif l 2 then msgbox PC接收超时
elseif l 3 then msgbox 应答错误
end if
Windows动态连接库是包含数据和函数的模块,可以被其它可执行文件(EXE、DLL、OCX 等)调用。动态连接库包含两种函数:输出(exported)函数和内部(internal)函数。输出函数可以被其它模块调用,而内部函数则只能在动态连接库内部使用。尽管动态连接库也能输出 数据,但实际上它的数据通常是只在内部使用的。使用动态连接库的优点是显而易见的。将应用程序的一部分功能提取出来做成动态连接库,不但减小了主应用程序的大小,提高了程序 运行效率,还使它更加易于升级。多个应用程序共享一个动态连接库还能有效地节省系统资源。正因为如此,在Windows系统中,动态连接库得到了大量的使用。
一般来说,动态连接库都是以DLL为扩展名的文件,如Kernel32.dll、commdlg.dll等。但也有例外,如16位Windows的核心部件之一GDI.exe其实也是一个动态库。编写动态连接库的工具很多,如VisualC++、BorlandC++、Delphi等,具体方法可以参见相关文档。下面只以Visual C++6.0为例,介绍一下开发应用于VisualBasic6.0的动态连接库时应注意的问题(本文中所有涉及C/C++语言或编译环境的地方,都以VC为例;所有涉及Visual Basic的地方都以VB 为例)。
作为一种32位Windows应用程序的开发工具,VB生成的exe文件自然也都是32位的,通常情况下也只能调用32位的动态连接库。但是,并不是所有的32位动态库都能被VB生成的exe 文件正确地识别。一般来说,自己编写用于VB应用程序调用的动态连接库时,应注意以下几个方面的
问题:
1、生成动态库时要使用__stdcall调用约定,而不能使用缺省的__cdecl调用约定;__stdcall 约定通常用于32位API函数的调用。
2、在VC中的定义文件(.def)中,必须列出输出函数的函数名,以强制VC系统将输出函数的装饰名(decoratedname)改成普通函数名;所谓装饰名是VC的编译器在编译过程中生成的输出函数名,它包含了用户定义的
您可能关注的文档
- 国内权威3G软工程师培训.docx
- 国内近三年海明研究综述.doc
- 国古代思想宝库元复习设计.doc
- 国外比较著名的习科学研究中心简介.doc
- 国外电子商务现2014.docx
- 国学《声律启蒙讲座稿.doc
- 国学修养与人生慧考试.doc
- 国学名师姚淦铭智慧孔子带到申城.doc
- 国学精义之诸子家——名家论坛第51部.docx
- 国家公务员考试测真题答案下载【完整打印版】.doc
- 2025届上海市宝山区建峰附属高中高三下学期综合测试五(5月)英语试题含解析.doc
- 2025届陕西省西安市第46中学高三年级第二学期联合调研英语试题含解析.doc
- 2025届上海市徐汇中学高三下学期3月联考试题高三生物试题试卷含解析.doc
- 2025届上海市崇明区高三4月月考生物试题试卷含解析.doc
- 2025届上海市第三女子中学高三第二次联考(二模)英语试题试卷含解析.doc
- 2025届上海市北中学高三第二次统一考试生物试题含解析.doc
- 2025届上海市南汇第一中学高三英语试题3月18日第3周测试题含解析.doc
- 2025届上海市闵行区闵行中学高考二模生物试题试卷含解析.doc
- 2025届陕西省延安市吴起县吴起高级中学高三第四次模拟考试生物试题试卷含解析.doc
- 2025届陕西省西安市高新唐南中学高三零诊考试生物试题含解析.doc
文档评论(0)