vb中调用程序时参数传递

vb中用shell命令调用函数时传递参数一般是用双引号中间写上调用程序的路径,如果要加参数的话就在路径后空格然后写上参数,如shell("c:\hjss.exe 1.23 s"),但我想问一下,如果这里的传递的参数是由程序中的变量决定怎么办?如上例中的1.23是程序中的变量a决定的。那么这样怎么传递参数啊,能这样写shell("c:\hjss.exe a s")吗?
如果有很多个参数,如一个数组array( 1 to 50)的每个元素都是一个参数那怎么写啊?总不能一个一个写上去吧?有什么简便方法?
哪位大侠知道?
答得好的话我会加分。
数组的那个是指数组的50个元素都是一次调用过程的参数,不是指调用50次程序。即shell(c:\hjss.exe array(1) array(2) ……array(50))

单变量参数传递比较方便,按下面写就可以了
...
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)
...
温馨提示:答案为网友推荐,仅供参考
第1个回答  2019-05-11
要说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
第2个回答  推荐于2016-08-18

调用时带参数运行即可。

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

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

相似回答