遇到一个2B的问题,我的世界观被颠覆了

皮特胖胖 2014-04-27 05:09:02
调用API函数后,传递的变量testStr值居然被更改了,明明是“ByVal”啊!!
  
Public Class Form1
Private Declare Function FindWindow Lib "user32" Alias "FindWindowA" (ByVal lpClassName As String, ByVal lpWindowName As String) As IntPtr
Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
Dim testPtr As IntPtr, testStr As String
testStr = "测试窗口标题123"
Debug.WriteLine("前:" & testStr)
testPtr = FindWindow(vbNullString, testStr)
Debug.WriteLine("后:" & testStr)
End Sub
End Class

...全文
89 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
皮特胖胖 2014-04-27
  • 打赏
  • 举报
回复
引用 1 楼 iyomumx 的回复:
It's a feature, not a bug. 早期的VB没有.Net引入的特性机制,为了在调用外部DLL时能够区分BSTR和LPCSTR这两种类型,VB规定使用ByVal定义的参数将转换为LPCSTR传递,而ByRef则对应BSTR。 VB.Net为了兼容性保持了这个特性,给予了Declare语句中ByVal String这个“特权”使P/Invoke能够修改以ByVal传递的字符串。
多谢前辈!!学无止境,学无止境。。
iyomumx 2014-04-27
  • 打赏
  • 举报
回复
It's a feature, not a bug. 早期的VB没有.Net引入的特性机制,为了在调用外部DLL时能够区分BSTR和LPCSTR这两种类型,VB规定使用ByVal定义的参数将转换为LPCSTR传递,而ByRef则对应BSTR。 VB.Net为了兼容性保持了这个特性,给予了Declare语句中ByVal String这个“特权”使P/Invoke能够修改以ByVal传递的字符串。

16,556

社区成员

发帖
与我相关
我的任务
社区描述
VB技术相关讨论,主要为经典vb,即VB6.0
社区管理员
  • VB.NET
  • 水哥阿乐
  • 无·法
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧