当前位置:编程学习 > VB >>

关于vb copymemory函数使用问题

我想测试一下使用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  --------------------编程问答-------------------- 你的CopyMemory的声明是怎么声明的?
参阅一下这个 --------------------编程问答--------------------
引用 1 楼 Veron_04 的回复:
你的CopyMemory的声明是怎么声明的?
参阅一下这个


我的函数声明如下:
Private Declare Sub CopyMemory Lib "kernel32" Alias "RtlMoveMemory" (Destination As Any, Source As Any, ByVal Length As Long) --------------------编程问答--------------------
    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
--------------------编程问答--------------------
引用 3 楼 zdingyun 的回复:
    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


这段代码比我的就少了一行,我的本意是赋值到byte数组后,又返回到字符串看看,这个过程是否正确。 --------------------编程问答--------------------
引用 4 楼 u011661466 的回复:
Quote: 引用 3 楼 zdingyun 的回复:

    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


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

那也无需CopyMemory:
Option Explicit
    Dim strData As String
    Dim yTemp() As Byte

Private Sub Command2_Click() 'byte数组到字符串
    strData = StrConv(yTemp, vbUnicode)
    Text2 = strData
End Sub

Private Sub Form_Load()
    Text1 = ""
    Text2 = ""
End Sub

Private 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
--------------------编程问答--------------------
引用 5 楼 zdingyun 的回复:
Quote: 引用 4 楼 u011661466 的回复:

Quote: 引用 3 楼 zdingyun 的回复:

    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


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

那也无需CopyMemory:
Option Explicit
    Dim strData As String
    Dim yTemp() As Byte

Private Sub Command2_Click() 'byte数组到字符串
    strData = StrConv(yTemp, vbUnicode)
    Text2 = strData
End Sub

Private Sub Form_Load()
    Text1 = ""
    Text2 = ""
End Sub

Private 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. --------------------编程问答-------------------- 建议LZ仔细阅读此帖:
http://bbs.csdn.net/topics/310268078
补充:VB ,  基础类
CopyRight © 2022 站长资源库 编程知识问答 zzzyk.com All Rights Reserved
部分文章来自网络,