二选一也行...

hh1 2000-04-13 09:37:00
各位高人:
vb中关于
Public Declare Sub CopyMemory Lib "KERNEL32" Alias "RtlMoveMemory" (Destination As Long, Source As Long, ByVal Length As Long)
是不是能换一种声明,因为如果用这个声明我只能将一个long类型的值写入内存的某一块地址,而不能对字符串类型的值进行操作,缺乏指针,不过我昨天看到了vb的指针----varptr,strptr,objptr,不过不会用?我现在程序所要做的是将一个长度为20byte的字符串写入内存映射文件,并能够将它读出。该如何???

另外,再问一个问题:

在线程中 SendMessage hWnd, LB_ADDSTRING, 0, strContent-是针对listbox 控件,发送add string消息。

如果现在换成是个checkbox控件,该发什么消息。有没有CK_Add之类的常数,能够使 checkbox做上标记或去处标记(土一点的说法:打钩或不打钩)。好象这样的常数我在api view里没有发现。



...全文
156 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
hh1 2000-04-13
  • 打赏
  • 举报
回复
好象用
dim lpDest as long
dim str as String
CopyMemory(lpDest,AddressOf str,len(str))
这个方法不行么?
因为addressof 只是返回一个过程的地址。是不是搞错了????
929 2000-04-13
  • 打赏
  • 举报
回复
BM_SETCHECK wParam = (WPARAM) fCheck; // check state
lParam = 0; // not used; must be zero
其中FCHECK可取BST_CHECKD等值,值我已经在下面列了。
#define BM_GETCHECK 0x00F0
#define BM_SETCHECK 0x00F1
#define BM_GETSTATE 0x00F2
#define BM_SETSTATE 0x00F3

#define BST_UNCHECKED 0x0000
#define BST_CHECKED 0x0001
#define BST_INDETERMINATE 0x0002

Public Const BM_SETCHECK = &HF1

用COPYMEMORY好象直接声明一个串,然后把这个串名传过去就可以了。
下面是MSDN中的例子。
Property Get Item() As String
If h = hNull Then ErrRaise ERROR_INVALID_DATA
BugAssert p <> pNull
' Copy length out of first 4 bytes of data
Dim c As Long
CopyMemory c, ByVal p, 4
If c Then
' Copy the data
Item = String$(c, 0)
CopyMemoryToStr Item, ByVal (p + 4), c * 2
End If
End Property

Property Let Item(s As String)
If h = hNull Then ErrRaise ERROR_INVALID_DATA
BugAssert p <> pNull
Dim c As Long
c = Len(s)
' Copy length to first 4 bytes and string to remainder
CopyMemory ByVal p, c, 4
CopyMemoryStr ByVal (p + 4), s, c * 2
End Property
dengdun 2000-04-13
  • 打赏
  • 举报
回复
1.所有的指针都是long型的,不管整形指针还是字符数组指针,一个字符串实际上就是一个字符数组,它的指针就是该字符串的第一个字符在内存中的地址,CopyMemory函数里的第三个参数是内存区域的大小,但实际上也就是你要拷贝的字符串的长度,如果你想要将某一个字符串拷贝到另一块内存区域,你可以这么写。
dim lpDest as long
dim str as String
CopyMemory(lpDest,AddressOf str,len(str))

2.如果你只是想要通过发送消息来改变CheckBox的选中状态,那么你可以发送WM_LBUTTONDOWN 或 WM_LBUTTONUP消息即可,实际上CheckBox也是一个Button。
hh1 2000-04-13
  • 打赏
  • 举报
回复
各位:
我要是想在一个进程中将一个字符串a="abcd"写到内存映射文件的一个地址中,然后在另外一个进程中通过映射得到这个地址,并将里面的内容读出a这个值该如何办?
hh1 2000-04-13
  • 打赏
  • 举报
回复
各位:
CopyMemoryToStr ,CopyMemoryStr 到底如何声明,我怎么声明它都提示错误。

Why Why Why????

7,762

社区成员

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

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