在窗体中请用Private Type MyType a As Integer End Type方式申明结构体在模块中才可以直接 Type MyType a As Integer End Type原因: 窗体中不允许出现Public 的结构申明和枚举申明,而在申明时不加Public 或 Private 时,VB默认为Public ,所以起冲突会出错。你可能是在窗体中申明的结构是吗?一个中肯的建议就是请在定义变量或其它时带上Public 或 Private 限定符,谢谢
Public Type MyType .... End Type ....Public Declare vcFunction Lib "vcDll" Alias "vcFunction" (...) As MyType... Dim ptrMyType As MyType prtMyType = vcFunction(...)调用者释放内存也不困难,写个free函数或其他类似函数的包装放到DLL里即可。
tell you that , if you meet any point\class then you should to solve it in VC DLL , if that ...
to SteveGYCN() : 我不想用你这种方式,想用com的方式,具体讨论请看: http://expert.csdn.net/Expert/topic/1233/1233860.xml?temp=.833111
to SteveGYCN() : 因为我做的是一个组件,给使用其他语言的用户使用(Delphi,vb等),所以要遵从com的规范
不要使用类型了,直接对内存操作不就好了 假设: 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
a As Integer
End Type方式申明结构体在模块中才可以直接
Type MyType
a As Integer
End Type原因:
窗体中不允许出现Public 的结构申明和枚举申明,而在申明时不加Public 或 Private 时,VB默认为Public ,所以起冲突会出错。你可能是在窗体中申明的结构是吗?一个中肯的建议就是请在定义变量或其它时带上Public 或 Private 限定符,谢谢
我要使用vc的一个函数,此函数在内部动态分配了一段内存,然后给内存赋值,最后返回内存的开始地址。这个函数是不能修改的啦。调用这个函数的人也要负责释放这段内存。现在已知这段内存的组织结构就是MyType,我想要对其进行直接的读写操作,而不是将整段内容复制到MyType中来做。请问该怎么办?
试试看。
比如:你在VC 中写入的内存的数据是一个接一个的排列,你在 MyType 中定义的数据要和VC中一个接一个的数据类型相匹配。
在vc中写入内存的数据肯定与MyType中的类型匹配。
....
End Type
....Public Declare vcFunction Lib "vcDll" Alias "vcFunction" (...) As MyType...
Dim ptrMyType As MyType
prtMyType = vcFunction(...)调用者释放内存也不困难,写个free函数或其他类似函数的包装放到DLL里即可。
我不想用你这种方式,想用com的方式,具体讨论请看:
http://expert.csdn.net/Expert/topic/1233/1233860.xml?temp=.833111
另外在 VB 声明中这个结构必须声明为 ByRef xxx As Any。
只能在IDL文件里定义那个MyType了(要分配一个CLSID,用工具生成一个),这样可以得到最直观的结果,MIDL可以自动生成marshal这个结构的代码,而且VB引用这个对象的时候,自动提示还可以起作用。
因为我做的是一个组件,给使用其他语言的用户使用(Delphi,vb等),所以要遵从com的规范
假设:
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
如果不是用类型,那我根本就不用问这个问题了。