7,763
社区成员
发帖
与我相关
我的任务
分享
C maxof.c:
__stdcall long maxof(long a[],int n)
{
if(n<=0)return -1;
{
long m =a[0];
long i;
for(i=1;i<n;i++) if(a[i]>m) m =a[i];
}
return a[i];
}
VB:
'1)数组参数当作指针,值传递,传递第一元素(序号=0)的地址
' 指针声明为 LONG 类型
'声明
public declare function maxof lib "maxof.dll" (byval a as LONG ,byval n as LONG)as long
'调用
dim x(100) as long
dim m as long
dim n as long
n=100
for i=0 to 100-1
x(i) =i
next i
m = maxof(varptr(x(0)),n)
'2)第二种方式,数组按照引用传递,传递第一个参数(序号为0)
'声明
public declare function maxof lib "maxof.dll" (byref a as LONG ,byval n as LONG)as long
'调用
sub calcmax
dim x(0 to 100-1) as long
dim m as long
dim n as long
n=100
for i=0 to 100-1
x(i) =i
next i
m = maxof(x(0),n)
end sub
}
VB 调用自己定义的函数,可以采用以上两种方式,不过比较麻烦。
也可以直接传递数组,这是最好的方式。
'3) VB 内部使用数组,可以用任何方式传递参数
'可以直接传递整个数组
'定义函数:
function maxof (a() as long)as long
dim lb as long,ub as long
lb =lbound(a)
ub =ubound(a)
dim m as long
dim i as long
m= a(lb)
for i=lb+1 to ub
if(a(i)>m) then m=a(i)
next i
maxof =m
end function
'调用函数
sub calcmax
dim x(0 to 100-1) as long
dim m as long
dim n as long
n=100
for i=0 to 100-1
x(i) =i
next i
m = maxof(x)
end sub
PS:
VB数组,包含数组每一维度的大小信息,至少参数传递是这个样子的
数组数据本身,自然也是顺序存放的。
不过数组地址不是数据地址。
VB字符串也是如此,并且更复杂。
所以直传递数组,字符串,调用C动态库,和API一般直接传递,都是不行的。
要做一些处理,才可以使用。
不过VB.net 应该好用的多。
dim I() as byte, J as long, K as long
redim i(0)
text1.text=""
for j = 0 to 200
k=k+1
if k=16 then
k=0
text1.text=text1.text & right("00" & hex(i(j)),2) & vbcrlf
else
text1.text=text1.text & right("00" & hex(i(j)),2) & " "
end if
next
这个代码会显示出数组I后面的一堆内存内容.
不过需要编译后才有用,并且编译选项中需要勾上"取消数组越界检查".
对于redim的情况,VB会看当前地址后面的可用内存空间够不够,如果够就直接扩,不够就重新申请一段足够的内存块,如果指定了preserve,就会复制原来的数据到新位置.