看到一个源码使用Imalloc来为一个结构分配内存空间!可是我使用rect结构的时候,没有分配空间直接使用,也没发生错误啊!例子如下:
  Dim lptvid As Long 
  Dim tvid As TVITEMDATA
 lptvid = isMalloc.Alloc(Len(tvid))  ' isMalloc 就是Imalloc为使用的结构体分配内存有什么讲究吗?望大侠们指点一下!`(0∩_∩0)′

解决方案 »

  1.   

    他这个是:
    lptvid 作为‘指针’,其值“指向”一个 TVITEMDATA类型 的结构体数据区。跟你一般情况下用 RECT类型 的结构体变量(自定义数据类型)是不一样的。
    其实他这个也不必用API来做,这样的效果是一样的:
    Dim lptvid As Long
    Dim tvid As TVITEMDATA
    'lptvid = isMalloc.Alloc(Len(tvid))   '动态分配了一个内存区。变量 tvid 的内存区并没有利用。
    lptvid = VarPtr(tvid)                 'lptvid 指向了变量 tvid 的区域。
      

  2.   

    “定义一个结构或类型后,当需要使用时,一定要使用Imalloc分配内存吗?”可以这样说:根本不需要。如果你声明了一个自定义类型的变量,编译器会按相应的“结构体类型”分配所需的内存空间。
    如果你声明了一个自定义类型的变量数组,编译器同样会给你的‘数组’分配一片合法的内存空间。
    只要你的“结构体类型”正确定义了,你使用起来跟 VB 的基本数据类型是完全相同的。
    (唯一的区别是:基本类型肯定是 Public 的;但自定义类型可以是 Public的,也可以是 Private的)
      

  3.   

    Dim lptvid As Long  
    Dim tvid As TVITEMDATA
    lptvid = VarPtr(tvid)