vb 强制转换,小弟不懂

liutaoxwl 2005-05-20 11:30:18
比如我声明了一个结构体
type point
x as long
y as long
end type
那么我又拥有一个
dim obj(100) as byte
obj里面有内容
我想把obj强制转换成point,应该怎么做。我是做vc的,vc里面很好做,但是不知道vb又没有这样的功能?谢谢
...全文
498 12 打赏 收藏 转发到动态 举报
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
liutaoxwl 2005-05-23
  • 打赏
  • 举报
回复
前两天根据几位大哥的解答终于把我的问题搞定了,特此写了一篇vb hook api的文章,呵呵,我对vb了解真是太少了,隔行如隔山啊,希望vb高手指点一二。
http://blog.csdn.net/liutaoxwl/archive/2005/05/21/377759.aspx

马上结贴,再次感谢。
liutaoxwl 2005-05-20
  • 打赏
  • 举报
回复
各位大哥,还有一个问题 我用addressof怎么没有成功过?
建立一个vb的主程序
然后代码如下
Private Declare Function fnvcTest Lib "vcTest" (ByVal l&) As Long

Public Function abc(ByVal a As Long)
MsgBox a
End Function

Private Sub Form_Load()
Dim ll
ll = fnvcTest(AddressOf abc)
End Sub
我用vc写了一个dll叫做vcTest,导出一个函数声明如下
typedef long (*TESTFUNC)(long l);
VCTEST_API WINAPI int fnvcTest(TESTFUNC pf);
其实就是在这个函数里面一回调函数的方法调用vb的abc函数
可是程序已运行就说
变异错误
操作符addressof使用无效
cnapc 2005-05-20
  • 打赏
  • 举报
回复
难道不能自己写一个函数吗?非得要用API或者写入文件?
homezj 2005-05-20
  • 打赏
  • 举报
回复
不用API?
那你就将Byte写入文件,再用point结构读出。
liutaoxwl 2005-05-20
  • 打赏
  • 举报
回复
vc里面最简单的方法是
POINT pt;
BYTE *bt;
// bt = new BYTE[8];
// bt = ...
memcpy(&pt,bt,sizeof(pt));

我想不调用memcpy等api的话,在vb里面能做吗?
hsghxm 2005-05-20
  • 打赏
  • 举报
回复
大哥,在vb里就这个最灵活了,直接操作就可以了。不用api的。
至于vc里怎么转,我很想请教一下,我正在学vc:)
liutaoxwl 2005-05-20
  • 打赏
  • 举报
回复
大哥具体点给个例子
homezj 2005-05-20
  • 打赏
  • 举报
回复
可以,调用API中的RtlMoveMemory(CopyMemory)就行
51365133 2005-05-20
  • 打赏
  • 举报
回复
用VC写个DLL,让后用VB调用 :)
liutaoxwl 2005-05-20
  • 打赏
  • 举报
回复
谢谢homezj(小吉)
按照你的方法我调用成功了
homezj 2005-05-20
  • 打赏
  • 举报
回复
Public Function abc
这个函数声明必须放在标准模块中,不能放在窗体中
AddressOf关键字只能传递位于标准模块中的Public声明的公用过程或函数。
Tiger_Zhao 2005-05-20
  • 打赏
  • 举报
回复
要用下面的方式,比较怪,估计又是什么历史原因
ll = fnvcTest(fptr((AddressOf abc))

function fptr(byval ptr as long) as long
fptr = ptr
end function

7,763

社区成员

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

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