to holydiablo(鱼头):
谢谢你的建议,但是现在就出现了这样的需要。我需要的是解决此问题的帮助

解决方案 »

  1.   

    在窗体中请用Private Type MyType
        a As Integer
    End Type方式申明结构体在模块中才可以直接
    Type MyType
        a As Integer
    End Type原因:
    窗体中不允许出现Public 的结构申明和枚举申明,而在申明时不加Public 或 Private 时,VB默认为Public ,所以起冲突会出错。你可能是在窗体中申明的结构是吗?一个中肯的建议就是请在定义变量或其它时带上Public 或 Private 限定符,谢谢
      

  2.   

    不好意思,不知道CSDN怎么回事,竟然只能显示头几行问题,刚才下面的内容没看到,API 中不是常传递结构体吗,你也可以把自己的结构传给VC 去啊
      

  3.   

    copymemory就是给你做这个用的,为什么不用啊
      

  4.   

    您的意思不就是用  VB去指定的内存中取一些数据吗?在VC里写个函数,把这个变量的地址传过去,然后让VC为它赋值,这样或许好一点。
      

  5.   

    感谢各位热心人的帮助,但是我这里有一个限制:
    我要使用vc的一个函数,此函数在内部动态分配了一段内存,然后给内存赋值,最后返回内存的开始地址。这个函数是不能修改的啦。调用这个函数的人也要负责释放这段内存。现在已知这段内存的组织结构就是MyType,我想要对其进行直接的读写操作,而不是将整段内容复制到MyType中来做。请问该怎么办?
      

  6.   

    把MyType声明为class,因为class为引用类型。
    试试看。
      

  7.   

    http://www.csdn.net/develop/author/netauthor/AdamBear/
      

  8.   

    其实关键的问题是你在vc中写入内存的数据是什么类型?
    比如:你在VC 中写入的内存的数据是一个接一个的排列,你在 MyType 中定义的数据要和VC中一个接一个的数据类型相匹配。
      

  9.   

    to shhxj:
    在vc中写入内存的数据肯定与MyType中的类型匹配。
      

  10.   

    VB不是有个GetPtr函数可以得到对象的内存地址吗?不知是否可以。
      

  11.   

    Public Type MyType
    ....
    End Type
    ....Public Declare vcFunction Lib "vcDll" Alias "vcFunction" (...) As MyType...
    Dim ptrMyType As MyType
    prtMyType = vcFunction(...)调用者释放内存也不困难,写个free函数或其他类似函数的包装放到DLL里即可。
      

  12.   

    tell you that , if you meet any point\class then you should to solve it in VC DLL , if that ...
      

  13.   

    to  SteveGYCN() :
    我不想用你这种方式,想用com的方式,具体讨论请看:
    http://expert.csdn.net/Expert/topic/1233/1233860.xml?temp=.833111
      

  14.   

    如果匹配就不会有问题。但要注意的是 VC 是32位而VB是16位,int 配 Long 等。在 VC 中 Myarray[10] 数组只有9项 则 VB 应为 Myarray(9)。
    另外在 VB 声明中这个结构必须声明为 ByRef xxx As Any。
      

  15.   

    Type中存在16bits,32bits,64bits对齐的问题。
      

  16.   

    为什么一定要COM的方法呢?
    只能在IDL文件里定义那个MyType了(要分配一个CLSID,用工具生成一个),这样可以得到最直观的结果,MIDL可以自动生成marshal这个结构的代码,而且VB引用这个对象的时候,自动提示还可以起作用。
      

  17.   

    to  SteveGYCN() :
    因为我做的是一个组件,给使用其他语言的用户使用(Delphi,vb等),所以要遵从com的规范
      

  18.   

    不要使用类型了,直接对内存操作不就好了
    假设:
    type mytype
        a as byte
        b as integer
    end type得到的地址 l,则
    mytype.a=othervar 等价于
    copymemory byval l,byval varptr(othervar),1mytype.b=othervar 等价于
    copymemory byval l,byval varptr(othervar),2
      

  19.   

    to subzero(赘姆烂壳):
    如果不是用类型,那我根本就不用问这个问题了。