vb中调用程序时参数传递

2024-12-16 18:04:44
推荐回答(3个)
回答1:

单变量参数传递比较方便,按下面写就可以了
...
dim a as string
a="1.23"
dim strShell as string
strShell="c:\hjss.exe " & a & " s"
shell(strshell)
...

要传递数组,如果用循环完成上述的功能,则会产生50个程序启动请求,而如果目标程序没有对接受参数进行代码上的优化,就会启动50个目标程序。

所以数组传递比较麻烦,要涉及到数组或函数内存地址的传递。而且由于Windows的进程内存空间的保护,编写传递参数的代码十分繁琐,有点得不偿失。

所以如果目标程序是自己编写的,就可以通过读写文件来达到传递数组的目的。
但如果是不能修改的程序,那就比较麻烦了,基本很难满足要求。
——————————————————————————
如果目标程序支持这样调用的话,也是用同样的循环方法生成调用字符串
...
dim a[49] as string
'数组a赋值
...
dim strShell as string
dim i as integer
strShell="c:\hjss.exe "
for i=0 to 49
strShell= strShell & a[i] & " " '参数间用空格分开
next i
strShell= strShell & " s"
shell(strshell)
...

回答2:

要说byval
就必须提到byref
下面我们来进行一下对比您就
明白了!
byval 传送参数内存的一个拷贝给被调用者。也就是说,栈中压入的直接就是
所传的值。
byref 传送参数内存的实际地址给被调用者。也就是说,栈中压入的是实际内
容的地址。被调用者可以直接更改该地址中的内容。
byval 可选的。表示该参数按值传递。
byref 表示该参数按地址传递。 byref 是 visual basic 的缺省选项。
byval是传递值 源数据不会被修改 你可以把这个值当作自己的局部变量来使用
byref是传递地址,源数据可能被修改,你对这个变量的操作将对你传入的那个变量产生影响,就像指针的感觉。
下面再举个实例:

程序代码
sub add1(byval no as int32)
no=no+100
end sub
sub add2(byref no as int32)
no=no+100
end sub
private sub command1_click()
dim a as int32
a=100
add1(a)
msgbox ("a的值为:" & a) '显示:a的值为100
add2(a)
msgbox ("a的值为:" & a) '显示:a的值为200,因为add2中的参数no为byref,即按地址传,因此在add2中对no进行修改后,将会导致'源参数a的值也被修改。
end sub

回答3:

调用时带参数运行即可。

在运行的VB程序的LOAD中添加:

Private Sub Form_Load()
If Command$ = "" Then
MsgBox "没有参数"
Else
MsgBox "参数是:" & Command$
End If
'执行参数对应的功能
End Sub