VB6.0调用C++dll参数传递问题

baggiowd 2012-09-04 09:44:06
文档中的开发说明对方法的描述:
原型 long Base64Decode(short * in, short * out, short len)
功能简介 用于将数据进行Base64 解码码
参数说明 In :输入数据(文本)
Out:输出数据(二进制)
Len:输入数据长度.

VB引用ocx后的方法是这样的
Function Base64Decode(in As Integer, out As Integer, len As Integer) As Long
但是这里的in和out是指针吧,VB这里应该怎么处理,in是传入参数,out是传出参数吧,那我怎么给传in和out呢
各位高人,求教
...全文
358 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
现在还是人类 2012-09-07
  • 打赏
  • 举报
回复
其实你的这个函数应该是邮件数据里用的 MIME 编码解码的函数,这种东西其实在VB里很容易自己做的呀,即使为了提高效率选择用C做起来也是很容易的,你其实可以自己写的,搜索一下“MIME 编码”或“Base64 编码”应该有很多资料的,写这个东西的编码解码函数我初学的时候也就花了两天,那时候也是自学VB没多久,可以搞定的。
baggiowd 2012-09-07
  • 打赏
  • 举报
回复
感谢楼上二位的帮助 还是有些问题无法解决 我已经要求提供开发包的公司给出详细的例子还方法说明
再次感谢二位
baggiowd 2012-09-07
  • 打赏
  • 举报
回复
这个只是这个开发包中的一个方法,参数比较有代表性的,其它都跟这个类似,而且这个最容易测试,呵呵 不过还是谢谢你
baggiowd 2012-09-05
  • 打赏
  • 举报
回复
SupermanKing 你好
昨天我没有说明白,不好意思
其实是一个activex控件 引用后,使用控件名.出来的函数是
Function Base64Decode(in As Integer, out As Integer, len As Integer) As Long
这个貌似没有办法修改吧
of123 2012-09-05
  • 打赏
  • 举报
回复

没关系,原来的声明是正确的。

参数声明没有加 ByVal 的缺省就是 ByRef, 也就是传址。因此相当于指针。

你的调用时类似这样:

Ret = Base64Decode(intInBuffer(0), intOutBuffer(0), 64)
现在还是人类 2012-09-05
  • 打赏
  • 举报
回复
既然是 ActiveX,为什么不用 COM 的理念写接口,而用 C 的理念写?
这个 ActiveX 不会是你自己写的吧?那还不如用 API 写接口呢。
如果用 COM 理念,接口应该是 VARIANT 类型,这样就可以直接在接口里处理数组了,哪还用这种指针操作。
如果不是你写的,没法改接口,你只能用我说的第一种方法了,用 Long 类型传递内存地址进去。
注意:调用时最好这样
rd = Base64Decode(ByVal lpInBuff,ByVal lpOutBuff,ByVal ArrayCount)
这样表示这个值就是地址,因为VB默认的是 ByRef,所以需要注明传递的是值。
现在还是人类 2012-09-04
  • 打赏
  • 举报
回复
你的不是 C++ DLL 吗?应该是 API 形式的 DLL 吧?怎么又和引用 ocx 有关,难道你的C++是ActiveX 工程?

Function Base64Decode(in As long, out As long, len As Integer) As Long
'......
Dim ArrayCount As Long ' 数组数量
Dim hInBuff As Long
Dim lpInBuff As Long
Dim hOutBuff As Long
Dim lpOutBuff As Long
Dim rd Ad Long

ArrayCount = 6
hInBuff = GlobalAlloc(GMEM_ZEROINIT, ArrayCount*LenB(Integer)) '申请内存空间
lpInBuff = GlobalLock(hInBuff)
' 将VB 数组中的数据复制到输入内存
CopyMemory ByVal lpInBuff,VbArray(0),(Ubound(VbArray)+1)*LenB(Integer)

ArrayCount = 256
hOutBuff = GlobalAlloc(GMEM_ZEROINIT, ArrayCount*LenB(Integer)) '申请内存空间
lpOutBuff = GlobalLock(hOutBuff)
rd = Base64Decode(lpInBuff,lpOutBuff,ArrayCount)
'......
GlobalUnlock hInBuff
GlobalUnlock hOutBuff
GlobalFree hInBuff
GlobalFree hOutBuff
'......

如果不是你所说的什么ocx,而是 API 接口的 DLL,可以在 API 声明入手直接用数组来处理

Declare Sub Base64Decode Lib "xx.dll" (inBuff As Any, OutBuff As Any, ByVal Length As Integer) As Long
'......
Dim InBuff(6) As Integer
Dim OutBuff(255) As Integer
Dim rd Ad Long
Base64Decode InBuff(0),OutBuff(0),255
'......

2.1.1 Visual C++ 6.0 中的使用 (1) 启动Visual C++ 6.0,新建一个工程; (2) 将下载的动态链接库压缩包里VC文件夹中的动态链接库、头文件和lib文件复制到工程文件 夹中; 第 2 章 运动控制器函数库的使用 15 © 1999-2019 固高科技版权所有 (3) 选择“Project”菜单下的“Settings…”菜单项; (4) 切换到“Link”标签页,在“Object\library modules”栏中输入lib文件名,例如gts.lib; (5) 在应用程序文件中加入函数库头文件的声明,例如:#include “gts.h”; 至此,用户就可以在Visual C++调用函数库中的任何函数,开始编写应用程序。 对于步骤(4),还有一种比较简便的方法,那就是在应用程序文件里面添加包含链接文件的声 明,例如:#pragma comment ( lib,"gts.lib" ) 。 上述关于Visual C++ 6.0调用GTS库函数的方法同样适用于使用Visual Studio平台开发。 2.1.2 Visual Basic 6.0 中的使用 (1) 启动Visual Basic,新建一个工程; (2) 将下载的动态链接库压缩包里VB6.0文件夹中的动态链接库和函数声明文件复制到工程文 件夹中; (3) 选择“工程”菜单下的“添加模块”菜单项; (4) 切换到“现存”标签页,选择函数声明文件,例如gts.bas,将其添加到工程当中; 至此,用户就可以在Visual Basic中调用函数库中的任何函数,开始编写应用程序。 2.1.3 Delphi 中的使用 (1) 启动Delphi,新建一个工程; (2) 将下载的动态链接库压缩包里Delphi文件夹中的动态链接库和函数声明文件复制到工程文 件夹中; (3) 选择“Project”菜单下的“Add to Project…”菜单项; (4) 将函数声明文件添加到工程当中; (5) 在代码编辑窗口中,切换到用户的单元文件; (6) 选择“File”菜单下的“Use Unit…”菜单项,添加对函数声明文件的引用; 至此,用户就可以在Delphi中调用函数库中的任何函数,开始编写应用程序。 2.1.4 VB.NET 中的使用 (1) 启动Visual Studio,按照“File”->"New",选择建立VB工程; (2) 将下载的动态链接库压缩包里VB.NET文件夹中的动态链接库和函数声明文件复制到工程 文件夹中,注意:gts.dll应复制到"..\bin"文件夹中的debug或者release文件夹中; (3) 选择“project”菜单下的“Add existing Item”菜单项,选择函数声明文件,如gts.vb,将其添加 到工程当中; 至此,用户就可以在Visual Studio中使用VB.NET模块调用函数库中的任何函数,开始编写应用 程序。 第 2 章 运动控制器函数库的使用 16 © 1999-2019 固高科技版权所有 2.1.5 Visual C#中的使用 (1) 启动Visual Studio,按照“File”->"New",选择建立C#工程; (2) 将下载的动态链接库压缩包里C#文件夹中的动态链接库和函数声明文件复制到工程文件夹 中,注意:gts.dll应复制到"..\bin"文件夹中的debug或者release文件夹中; (3) 选择“project”菜单下的“Add existing Item”菜单项,选择函数声明文件,如gts.cs,将其添加 到工程当中; 至此,用户就可以在Visual Studio中使用C#模块调用函数库中的任何函数,开始编写应用程序。

863

社区成员

发帖
与我相关
我的任务
社区描述
VB COM/DCOM/COM+
c++ 技术论坛(原bbs)
社区管理员
  • COM/DCOM/COM+社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧