比如我声明了一个结构体
type point
x as long
y as long
end type
那么我又拥有一个
dim obj(100) as byte
obj里面有内容
我想把obj强制转换成point,应该怎么做。我是做vc的,vc里面很好做,但是不知道vb又没有这样的功能?谢谢

解决方案 »

  1.   

    可以,调用API中的RtlMoveMemory(CopyMemory)就行
      

  2.   

    大哥,在vb里就这个最灵活了,直接操作就可以了。不用api的。
    至于vc里怎么转,我很想请教一下,我正在学vc:)
      

  3.   

    vc里面最简单的方法是
    POINT pt;
    BYTE *bt;
    // bt = new BYTE[8];
    // bt = ...
    memcpy(&pt,bt,sizeof(pt));我想不调用memcpy等api的话,在vb里面能做吗?
      

  4.   

    不用API?
    那你就将Byte写入文件,再用point结构读出。
      

  5.   

    难道不能自己写一个函数吗?非得要用API或者写入文件?
      

  6.   

    各位大哥,还有一个问题 我用addressof怎么没有成功过?
    建立一个vb的主程序
    然后代码如下
    Private Declare Function fnvcTest Lib "vcTest" (ByVal l&) As LongPublic Function abc(ByVal a As Long)
        MsgBox a
    End FunctionPrivate 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使用无效
      

  7.   

    要用下面的方式,比较怪,估计又是什么历史原因
    ll = fnvcTest(fptr((AddressOf abc))function fptr(byval ptr as long) as long 
      fptr = ptr
    end function
      

  8.   

    Public Function abc
    这个函数声明必须放在标准模块中,不能放在窗体中
    AddressOf关键字只能传递位于标准模块中的Public声明的公用过程或函数。
      

  9.   

    谢谢homezj(小吉)
    按照你的方法我调用成功了
      

  10.   

    用VC写个DLL,让后用VB调用 :)
      

  11.   

    前两天根据几位大哥的解答终于把我的问题搞定了,特此写了一篇vb hook api的文章,呵呵,我对vb了解真是太少了,隔行如隔山啊,希望vb高手指点一二。
    http://blog.csdn.net/liutaoxwl/archive/2005/05/21/377759.aspx马上结贴,再次感谢。