Private Sub Command1_Click()
    Dim aa As String
    aa = StrConv("床前明月光疑是地上霜", vbUnicode)
    Debug.Print Len(aa)
End Sub运行之后得到18!百思不得其解,应该是20呀!谁能帮忙看看

解决方案 »

  1.   


    Private Sub Command1_Click()
        Dim aa As String
        aa = StrConv("床前明月光疑是地上霜", vbUnicode)
        Debug.Print Len(aa)
        Debug.Print aa
    End Sub你看看转换后你得到的是什么
      

  2.   

    "床前明月光疑是地上霜"在VB 里这个就是Unicode吧,干嘛还要转换啊Private Sub Command1_Click()
        Dim aa As String
        aa = "床前明月光疑是地上霜"
        Debug.Print LenB(aa)End Sub
    这样就是20了
      

  3.   

    VB 里面的字符串常量本来就是Unicode编码的。
      

  4.   

    Private Sub Command1_Click()
        Dim aa As String
        aa = StrConv("床前明月光疑是地上霜", vbFromUnicode)
        Debug.Print LenB(aa)
    End Sub
      

  5.   

    我是在用下面这个函数出现这个问题的WriteProcessMemory pHandle, &H990D8, aa, 20, 0&内存操作的时候,&H990D8在这个地址后面都是UNCODE编码,如果我直接将字符串写进去,会出现乱码,我怀疑API在传递参数的时候转换了好几次,但在我添加了以下这句的时候,写入内存中就很顺利了,内存中也是UNICODE
    aa = StrConv("床前明月光", vbUnicode)可是当我将aa延长为“床前明月光疑是地上霜”时,前面九个字都很正常,但最后一个字却无论如何都是个乱码!用内存读取工具查看,在“霜”这个位置上,出现了缺损,本来应该是1C 97,但后面的97却不见了!而且奇怪地是,当aa的内容继续加长,总是出现这个问题!前九个字都很正常,后面一堆乱码!
      

  6.   

    写字符串的时候,要把最后的0写进去,你全中文的20字节的unicode字符串实际上在内存中是21个自己,后面还有2个0要记得写进去,不然系统找不到0会一直往后找的
      

  7.   

    WriteProcessMemory pHandle, &H990D8, aa, 20, 0&
    这个函数你最好把第三个参数改一下,改成byval xx as long
    然后传入strptr(aa),后面的长度改为(len(aa) + 1) * 2
    否则由于vb调用的是WriteProcessMemoryA因此在你调用这个函数的时候会首先把aa转换为ascii,然后再调用,改为byval xx as long就不会有这个问题了
      

  8.   

    WriteProcessMemory 是没有2个版本的,vb在用string作为参数的时候会直接先转换,作为输出的时候会在调用完毕后转换,所以最好不要用string作为api的参数
      

  9.   

    好奇怪!我照你下面说的改过了~这个函数你最好把第三个参数改一下,改成byval xx as long
    然后传入strptr(aa),后面的长度改为(len(aa) + 1) * 2内存里面倒是一切都正常了~可是我以前那种方法只要把接受程序刷新一次,界面上就可以显示出改动后的文字~但现在内存里面改好了,我怎么刷新都不出来!这是为什么啊?求求你,帮帮我~牛人!