我想测试一下使用copymemory 在字符串和定长byte数组之间转换的功能,见如下程序,看运行时程序崩溃了,请各位大侠指教。    
Dim bt(0 To 15) As Byte
    Dim strTemp As String
    Dim intTemp As Integer
    
    strTemp = "wangxiaofeng"
    CopyMemory bt(0), StrConv(strTemp, vbFromUnicode), LenB(StrConv(strTemp, vbFromUnicode))
   
    CopyMemory strTemp, bt, 16
    
    MsgBox strTemp 

解决方案 »

  1.   

    你的CopyMemory的声明是怎么声明的?
    参阅一下这个
      

  2.   


    我的函数声明如下:
    Private Declare Sub CopyMemory Lib "kernel32" Alias "RtlMoveMemory" (Destination As Any, Source As Any, ByVal Length As Long)
      

  3.   

        Dim bt(0 To 15) As Byte
        Dim strTemp As String
        Dim intTemp As Integer
        strTemp = "wangxiaofeng"
        CopyMemory bt(0), StrConv(strTemp, vbFromUnicode), LenB(StrConv(strTemp, vbFromUnicode))
        MsgBox strTemp
      

  4.   


    这段代码比我的就少了一行,我的本意是赋值到byte数组后,又返回到字符串看看,这个过程是否正确。
      

  5.   


    这段代码比我的就少了一行,我的本意是赋值到byte数组后,又返回到字符串看看,这个过程是否正确。
    那也无需CopyMemory:
    Option Explicit
        Dim strData As String
        Dim yTemp() As BytePrivate Sub Command2_Click() 'byte数组到字符串
        strData = StrConv(yTemp, vbUnicode)
        Text2 = strData
    End SubPrivate Sub Form_Load()
        Text1 = ""
        Text2 = ""
    End SubPrivate Sub Command1_Click() '字符字符到byte数组
        Dim sTemp As String
        'sTemp = "给电子工程师的忠告!!![1]好好规划自己的路,不要跟着感觉走!根据个人的理想决策安排,绝大部分人并不指望成为什么院士或教授,而是希望活得滋润一些,爽一些。那么,就需要慎重安排自己的轨迹。从哪个行业入手,逐渐对该行业深入了解,不要频繁跳槽,特别是不要为了一点工资而转移阵地,从长远看,这点钱根本不算什么,当你对一个行业有那么几年的体会,以后钱根本不是问题。频繁地动荡不是上策,最后你对哪个行业都没有摸透,永远是新手![2]可以做技术,切不可沉湎于技术。千万不可一门心思钻研技术!给自己很大压力,如果你的心思全部放在这上面,那么注定你将成为孔乙己一类的人物!适可而止为之,因为技术只不过是你今后前途的支柱之一,而且还不是最大的支柱,除非你只愿意到老还是个工程师!"
        sTemp = "1234567890给电子工程师的忠告!"
        yTemp = StrConv(sTemp, vbFromUnicode)
        Text1 = sTemp
        Text3 = Len(sTemp)
        Text4 = UBound(yTemp)
    End Sub
      

  6.   


    这段代码比我的就少了一行,我的本意是赋值到byte数组后,又返回到字符串看看,这个过程是否正确。
    那也无需CopyMemory:
    Option Explicit
        Dim strData As String
        Dim yTemp() As BytePrivate Sub Command2_Click() 'byte数组到字符串
        strData = StrConv(yTemp, vbUnicode)
        Text2 = strData
    End SubPrivate Sub Form_Load()
        Text1 = ""
        Text2 = ""
    End SubPrivate Sub Command1_Click() '字符字符到byte数组
        Dim sTemp As String
        'sTemp = "给电子工程师的忠告!!![1]好好规划自己的路,不要跟着感觉走!根据个人的理想决策安排,绝大部分人并不指望成为什么院士或教授,而是希望活得滋润一些,爽一些。那么,就需要慎重安排自己的轨迹。从哪个行业入手,逐渐对该行业深入了解,不要频繁跳槽,特别是不要为了一点工资而转移阵地,从长远看,这点钱根本不算什么,当你对一个行业有那么几年的体会,以后钱根本不是问题。频繁地动荡不是上策,最后你对哪个行业都没有摸透,永远是新手![2]可以做技术,切不可沉湎于技术。千万不可一门心思钻研技术!给自己很大压力,如果你的心思全部放在这上面,那么注定你将成为孔乙己一类的人物!适可而止为之,因为技术只不过是你今后前途的支柱之一,而且还不是最大的支柱,除非你只愿意到老还是个工程师!"
        sTemp = "1234567890给电子工程师的忠告!"
        yTemp = StrConv(sTemp, vbFromUnicode)
        Text1 = sTemp
        Text3 = Len(sTemp)
        Text4 = UBound(yTemp)
    End Sub
    麻烦就在于我这个地方比较要用固定长度的byte数组,不是动态数组,所以用strconv函数有问题,只能用copymemory.
      

  7.   

    建议LZ仔细阅读此帖:
    http://bbs.csdn.net/topics/310268078