CopyMemory 的原定义是 As Any 的在Net里好像不能用,
请问,如何修改才能让它在Net和非Net环境里通用?
(是不是都改成 As Long?)并且如何修改下面这段码,让其适应新的定义?Function Ptr2Obj(byval lPtr as Long) As Object
  CopyMemory tObj, lPtr, 4
  Set Ptr2Obj = tObj
  CopyMemory tObj, 0&, 4
End Function

解决方案 »

  1.   

    定义成long肯定错了,API都是32位的.Long是64位的.tObj是什么东东?? 
    第二个,参数改为byref desObj as int32总得来说,你传什么进去,就定义成什么类型.
      

  2.   

    漏了一句:
    Dim tObj As Object此函数的目的是把一对象地址转换为对象实体刚想起来,在NET中偶是直接把代码复制过去的,
    怪不得出错,忘记使用升级法了,否则的话As Long会自动改的,呵呵:)那就先说非NET状态下吧,
    若把CopyMemory 定义成 As Long(32位)
    这个函数好像就出问题了,请问该函数该怎么改?调用例子(只是讨论一个技术问题,请不要问这样做有什么意义:)Set tmpForm=Ptr2Str(ObjPtr(Form1))
      

  3.   

    Function Ptr2Obj(ByVal lPtr As Long) As Object
    Dim tObj As Object
      CopyMemory ByVal VarPtr(tObj), lPtr, 4
      Set Ptr2Obj = tObj
      CopyMemory ByVal VarPtr(tObj), 0&, 4
    End Function“对象地址”与“对象变量地址”是两回事,对象地址是指对象二进制数据所在的内存首地址,对象变量地址实际上是一个指向“对象地址”的指针。
      

  4.   

    晕,好像没听说过在.Net下要用这东西的。.Net下的代码基本都是受托管的,你要找出它的地址都不容易呢,更何况CopyMemory
      

  5.   

    .net不需要 有一个Stream 类
      

  6.   

    N多的升级代码,能自动把CopyMemory 转为Stream吗?:)
      

  7.   

    结帖了啊,哈哈,我给你帖到这里
        Private Declare Sub CopyMemoryToArr Lib "kernel32" Alias "RtlMoveMemory" (ByVal Destination() As Byte, ByRef Source As Integer, ByVal Length As Integer)
        Private Declare Sub CopyMemoryToDec Lib "kernel32" Alias "RtlMoveMemory" (ByRef Destination As Int32, ByVal Source() As Byte, ByVal Length As Integer)
        Private Declare Sub CopyMemoryArrToArr Lib "kernel32" Alias "RtlMoveMemory" (ByRef Destination() As Byte, ByVal Source() As Byte, ByVal Length As Integer)
    实际上Int32可以用Integer代替
    以上这只是一个修改方法,可以用显式装包来声明的,MSDN上一般都是装包的,另外这个几个函数实际上按照.NET的“正常”做法应该是重载的…………