目的是想把"12345"传给字符串str1,但为何不行?
Private Declare Sub CopyMemory Lib "kernel32" Alias "RtlMoveMemory" (pDst As Any, pSrc As Any, ByVal ByteLen As Long)Private Sub Command1_Click()
'Debug.Print "1" & Chr(192) & Chr(192)
Dim bt(5)
Dim str1 As String
For i = 0 To UBound(bt)
    bt(i) = 48 + i
Next
Call CopyMemory(ByVal StrPtr(str1), ByVal bt(0), 5)
Debug.Print str1
End Sub

解决方案 »

  1.   

    Call CopyMemory(ByVal StrPtr(str1), ByVal bt(0), 6)这样呢?
      

  2.   

    Dim bt(5)
    Dim str1 As String
    For i = 0 To UBound(bt) - 1
        bt(i) = 48 + i
    Next
    bt(5) = 0
    Call CopyMemory(ByVal StrPtr(str1), ByVal bt(0), 6)
    Debug.Print str1
      

  3.   

    复制需要有足够的空间,StrPtr(str1) = NULL,怎么可能赋值成功!
    其实不需要 API,直接 str1 = bt 或 str1 = StrConv(bt, vbUnicode)
      

  4.   

    bt的数据类型不对方法1:Private Sub Command1_Click()
    'Debug.Print "1" & Chr(192) & Chr(192)
    Dim bt(0 to 4) as Integer
    Dim str1 As String
    For i = 0 To UBound(bt)
        bt(i) = 48 + i
    Next
    Call CopyMemory(ByVal StrPtr(str1), bt(0), 5)
    Debug.Print str1
    End Sub方法2:Private Sub Command1_Click()
    'Debug.Print "1" & Chr(192) & Chr(192)
    Dim bt(0 to 4) as Byte
    Dim str1 As String
    For i = 0 To UBound(bt)
        bt(i) = 48 + i
    Next
    str1 = StrConv(bt, vbUnicode)
    Debug.Print str1
    End Sub
      

  5.   

    刚才忘了分配空间
    方法1:Private Sub Command1_Click()
    'Debug.Print "1" & Chr(192) & Chr(192)
    Dim bt(0 to 4) as Integer
    Dim str1 As String
    For i = 0 To UBound(bt)
        bt(i) = 48 + i
    Next
    str1 = String(5, 0)
    Call CopyMemory(ByVal StrPtr(str1), bt(0), 5)
    Debug.Print str1
    End Sub