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

遇到一个2B的问题,我的世界观被颠覆了
调用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

遇到一个2B的有关问题,小弟我的世界观被颠覆了
------解决方案--------------------
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传递的字符串。