问问 如果有一个API原形中
有一个参数 该参数被声明为AS ANY类型
那是不是在调用时对该参数的传值
必须加上BYVAL吗(默认为BYREF)
至少我做了几个实验是这样
比如
'================================
'VB声明 (向注册表里写值)
Declare Function RegSetValueEx Lib "advapi32.dll" Alias "RegSetValueExA" (ByVal hKey As Long, ByVal lpValueName As String, ByVal Reserved As Long, ByVal dwType As Long, lpData As Any, ByVal cbData As Long) As Long
rc = RegSetValueEx(keyh, KeyValueName, 0, dtype, ByVal value, Len(value)) '--乱码
rc = RegSetValueEx(keyh, KeyValueName, 0, dtype, value, Len(value)) '--正常
为什么会这样啊
VALUE是"111"
dtype 我选择的是REG_SZ的
注册表中是什么字符啊
有一个参数 该参数被声明为AS ANY类型
那是不是在调用时对该参数的传值
必须加上BYVAL吗(默认为BYREF)
至少我做了几个实验是这样
比如
'================================
'VB声明 (向注册表里写值)
Declare Function RegSetValueEx Lib "advapi32.dll" Alias "RegSetValueExA" (ByVal hKey As Long, ByVal lpValueName As String, ByVal Reserved As Long, ByVal dwType As Long, lpData As Any, ByVal cbData As Long) As Long
rc = RegSetValueEx(keyh, KeyValueName, 0, dtype, ByVal value, Len(value)) '--乱码
rc = RegSetValueEx(keyh, KeyValueName, 0, dtype, value, Len(value)) '--正常
为什么会这样啊
VALUE是"111"
dtype 我选择的是REG_SZ的
注册表中是什么字符啊
解决方案 »
- (100分求助)西祠论坛自动发帖无法提交正文(在线等)
- SCRIPTCONTROL如何对程序中对象进行操作
- 以下代码怎么封装成公共语言类库?
- StdDataFormat物件?
- [绝对好东东!]基于VB6.0的Windwos API全攻略
- word文档打开错误8001ffff
- 高分请教数据参数赋值、数据转换问题,急急!
- 1、如何在VB中调用API函数来得到CPU的频率? 2、如何调用API函数来改变LISTBOX的滚动条样式?有复必谢!回信[email protected]
- vb 关于MSFlexGrid调整行数
- 请问ado中如何得到存储过程返回的游标?高手请进!
- FileSystemObject 的对象怎么定义!!!
- 数据库操作模块化的问题
Declare Function RegSetValueEx Lib "advapi32" Alias "RegSetValueExA" (ByVal hKey As Long, ByVal lpValueName As String, ByVal Reserved As Long, ByVal dwType As Long, ByVal szData As String, ByVal cbData As Long) As Long
VB内部函数的Byref不代表同一个意义。(其实如果你用过回调,就会发现,这句话并不准确,其实是同意义的。应该说:在VB中声明的API函数,如果出现了byref,其实和VB内部函数的Byref比较起来,是个“做了一半”的Byref,只有取地址按值传递的过程,而在外部DLL中没有按地址还原别名的过程。VB内部函数的Byref传参是个完整的过程,不但包括取地址按值传递的过程,被调用者还做了把地址还原为别名变量的的过程。而回调的时候,如果出现了byref,是个“只做了后一半”的Byref,即是把地址还原为别名变量的的过程。)
http://community.csdn.net/Expert/topic/3992/3992063.xml?temp=.3965876