文档中的开发说明对方法的描述:
原型 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呢
各位高人,求教
原型 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呢
各位高人,求教
'......
Dim ArrayCount As Long ' 数组数量
Dim hInBuff As Long
Dim lpInBuff As Long
Dim hOutBuff As Long
Dim lpOutBuff As Long
Dim rd Ad LongArrayCount = 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
'......
昨天我没有说明白,不好意思
其实是一个activex控件 引用后,使用控件名.出来的函数是
Function Base64Decode(in As Integer, out As Integer, len As Integer) As Long
这个貌似没有办法修改吧
这个 ActiveX 不会是你自己写的吧?那还不如用 API 写接口呢。
如果用 COM 理念,接口应该是 VARIANT 类型,这样就可以直接在接口里处理数组了,哪还用这种指针操作。
如果不是你写的,没法改接口,你只能用我说的第一种方法了,用 Long 类型传递内存地址进去。
注意:调用时最好这样
rd = Base64Decode(ByVal lpInBuff,ByVal lpOutBuff,ByVal ArrayCount)
这样表示这个值就是地址,因为VB默认的是 ByRef,所以需要注明传递的是值。
没关系,原来的声明是正确的。参数声明没有加 ByVal 的缺省就是 ByRef, 也就是传址。因此相当于指针。你的调用时类似这样:Ret = Base64Decode(intInBuffer(0), intOutBuffer(0), 64)