迷惑:以ByVal的形式将String str传给一个API,执行完毕后,str获得新值,请问str的值为什么能改变呢? 迷惑:以ByVal的形式将String str传给一个API,执行完毕后,str获得新值,请问str的值为什么能改变呢? 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 在调用api时,对于字符串类型的你必须以byval类型传递就相当于传递地址,因为VB字符串变量其实是SAFEARRAY 是否改变,并不是由你调用的时候怎么写(ByVal or ByRef)来决定的,而是写API的时候决定的。如果API函数本身就是写成ByRef方式,即使你在声明的时候使用ByVal,也是不起作用的。 API不受你按什么方式(地址,传值)的影响.在VB中自定义函数可以. 我好像说错了ByVal是“按值”调用,参数传递时,不将指向DLL的指针传递给参数变量本身,而是将传递参数值的一份拷贝传递给DLL。比如传递字符串参数时,VB与DLL之间的接口支持两种类型的字符串,如未使用ByVal关键字,VB将指向DLL的函数指针传递给一个OLE2.0字符串(即BSTR数据类型),而Windows API函数往往不支持这种数据类型,导致错误。而使用ByVal关键字后VB将字符串转变换成C语言格式的“空终止”串,被API正确使用。 你传的是地址,在API函数中,将该地址原来的值改变了。 VB中的字符串以C的眼光来看是指向指针的指针,所以Byval传递过去的实际是真实字符串内容所在的地址的指针(如果是ByRef的话传递的就是指向这个指针的指针)。直到指针当然就能修改其指向的地址的内容了。 禁止关闭按钮和限制表格打开个数 关于Combobox数据绑定的问题 我用VB收RS232传送过来的字符串,但是每次传过来的开头总有一个很奇怪字符,好象是个“|_"或者反过来 这是我的源码,权限问题 VBA是如何运行的?它并没有编译成二进制可执行文件阿? 关于浮点数转化为4字节的问题。 求救!-关于读取文件列表中的excel文件 我跪下求你们能吗?回答我的问题.QQ:43730531--在线 100分寻求关于windows hook编程的资料(不要code) 问一个小问题,如何创建路径? vb坐标的单位换一下,怎么做 怎样把窗口的“关闭”按扭变灰?
就相当于传递地址,因为VB字符串变量其实是SAFEARRAY
在VB中自定义函数可以.
ByVal是“按值”调用,参数传递时,不将指向DLL的指针传递给参数变量本身,而是将传递参数值的一份拷贝传递给DLL。比如传递字符串参数时,VB与DLL之间的接口支持两种类型的字符串,如未使用ByVal关键字,VB将指向DLL的函数指针传递给一个OLE2.0字符串(即BSTR数据类型),而Windows API函数往往不支持这种数据类型,导致错误。而使用ByVal关键字后VB将字符串转变换成C语言格式的“空终止”串,被API正确使用。