请问怎样用CopyMemory函数copy整数变量到字符串变量

coldboy 2007-05-09 07:53:09

我运行下面的VB就退出,不知是不是VB做的类型检查导致的?
dim test as long,test2 as string
test=65537
test2=" "
CopyMemory MemPoint, VarPtr(test), 4
CopyMemory VarPtr(test2), MemPoint, 4
...全文
217 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
fankun 2007-05-09
  • 打赏
  • 举报
回复
我上次读文件的时候也遇到过问题,就是byte和string*1,都是0-255的,这都会出问题,
更别说integer了,它还包括负数的啊。。怎么可以这样。
WM_JAWIN 2007-05-09
  • 打赏
  • 举报
回复
你这个不是复制,是类型转换,即Long->String,用Copymenory()是错的
用VB代码实现:
test2=Cstr(test)

如果你要保持长度为4的话
test2=right(" " & cstr(test),4)
coldboy 2007-05-09
  • 打赏
  • 举报
回复
贴上完整的代码

Private Declare Sub CopyMemory Lib "kernel32" Alias "RtlMoveMemory"

(ByVal pDst As Any, ByVal pSrc As Any, ByVal ByteLen As Long)

'API memory functions
Private Declare Function GlobalAlloc Lib "kernel32" (ByVal wFlags As

Long, ByVal dwBytes As Long) As Long
Private Declare Function GlobalFree Lib "kernel32" (ByVal hMem As Long)

As Long
Private Declare Function GlobalLock Lib "kernel32" (ByVal hMem As Long)

As Long
Private Declare Function GlobalUnlock Lib "kernel32" (ByVal hMem As

Long) As Long

'constants for API memory functions
Private Const GMEM_MOVEABLE = &H2
Private Const GMEM_ZEROINIT = &H40
Private Const GHND = (GMEM_MOVEABLE Or GMEM_ZEROINIT)

Dim pHnd As Long
Dim MemPoint As Long

Private Sub cmd_Alloc_Click()
Dim i As Long
Dim test As Long
Dim test2 As string
Dim ReadMem As Byte

pHnd = GlobalAlloc(GHND, 8)
MemPoint = GlobalLock(pHnd)

test = 65537
test2 = " "
CopyMemory MemPoint, VarPtr(test), 4
CopyMemory VarPtr(test2), MemPoint, 4

GlobalFree pHnd
End Sub
coldboy 2007-05-09
  • 打赏
  • 举报
回复
呵呵此问题已知答案
经返回试验,在CopyMemory 时VB会做强制类型检查。

1,488

社区成员

发帖
与我相关
我的任务
社区描述
VB API
社区管理员
  • API
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧