属性是一个float*类型,编译出现warning MIDL2039
属性是一个float*类型,编译出现warning MIDL2039。 为什么会这样?
我想由该属性得到对象内的一个数组来使用。
问题点数:50、回复次数:13Top
1 楼phiger(phiger)回复于 2002-11-21 14:15:58 得分 5
the float is C/C++ data type!Top
2 楼bojinyu(沙鱼)回复于 2002-11-23 21:58:15 得分 0
接口的参数真不太懂,有什么好建议?Top
3 楼supperbeyond(new)回复于 2002-11-23 23:35:18 得分 10
float可以是double和float两种型别(也就是双精度和单精度的),两个型别在内存中分配的字节数不同,C/C++语言由于类型上的灵活性可以自动识别,但是像VB这种弱类型的就不行了(VB中单精度和双精度是两个不同的类型),其他的更加不用说了,因此COM做为一个二进制的标准禁止了这种类型,而是规定了自己的定长(不依耐于平台和开发环境)类型,这些类型在VARIANT这个union中都有定义。如果对效率要求不高的话,传递参数可以简单的一律使用VARIANT型,这样就不会有问题了。
简单来说就是这样的,具体的建议你看看《COM本质论》第2章相关部分Top
4 楼bojinyu(沙鱼)回复于 2002-11-24 22:15:54 得分 0
哪里有《COM本质论》,送我一份吧~ 油箱:br428@hotmail.comTop
5 楼cygroup()回复于 2002-11-25 13:16:45 得分 5
如果你必须要使用自动化,那就按supperbeyond(new) 说的做,否则,在COM中使用C/C++数据类型跟平常没什么两样,我就是这样作的。
Email:csdn@huixing.comTop
6 楼ComeAlong(ComeAlong)回复于 2002-11-25 18:45:45 得分 5
应该是弄错了,float是无歧意类型 4 byte 浮点型,float * 是自动化类型应该不会报错Top
7 楼nustchenhf()回复于 2002-11-29 15:51:48 得分 15
IDL类型 C/C++类型 Visual Basic类型
boolean unsigned char 无映射情况
byte unsigned char Byte
char unsigned char 无映射情况
double double Double
float float Single
hyper _int64float 无映射情况
int int Long
_int64 _int64 无映射情况
long long Long
short short Integer
small char 无映射情况
wchar_t unsigned short 无映射情况Top
8 楼wei97081116(韦小宝)回复于 2002-11-29 16:51:56 得分 5
先搞明白MIDL2039是啥意思
MIDL2039: interface is not automation marshaling conformant, requires Windows NT 4.0 SP4 or greater
The interface does not meet the requirements for an OLE Automation interface. Check to make sure the interface is derived from IUnknown or IDispatch.
在贴出你的IDL源码Top
9 楼bojinyu(沙鱼)回复于 2002-11-30 10:21:13 得分 0
韦小宝,我也搞不懂啊,应该跟NT sp4没关系。
nustchenhf说的有点道理,可能是float* 不是IDL类型。但这就奇怪了,向导里返回值有float*这个选项。 难到是做成了双接口的原因?
哪位高人给剖析剖析Top
10 楼wei97081116(韦小宝)回复于 2002-11-30 12:11:59 得分 0
float没有问题Top
11 楼anxing(anxing)回复于 2002-11-30 12:23:43 得分 0
好象用float不会报错吧,至少不是float的错。
同意wei97081116(韦小宝): 在贴出你的IDL源码
Top
12 楼bojinyu(沙鱼)回复于 2002-11-30 13:52:28 得分 0
IDL源码:
[propget, id(9), helpstring("property GDArray")] HRESULT GDArray([out, retval] float* *pVal);
如果是float 而不是float* 当然不会有事。
[propget, id(9), helpstring("property GDArray")] HRESULT GDArray([out, retval] float *pVal);
可我想要float*,是不是这样做想得到数组本身就是错误的?
Top
13 楼ComeAlong(ComeAlong)回复于 2002-11-30 14:34:20 得分 5
可是float** 不是自动化类型
如果你想输出数据组,
要么用一至性数组(指针),这样VB支持不是很好,而且不能声明为自动化类型(去掉DUAL 或 oleautomation)
还有就是用安全数组
http://support.microsoft.com/default.aspx?scid=KB;en-us;131086&
SAFEARRAY 的使用例子
Top
相关问题
- VC编译得到的:warning!
- 编译后 0 error(s), 226 warning(s) 。。。。。。。。。
- 关于MIDL编译器的问题!!
- *****---声明vector编译时warning的问题---*****
- 编译错误:warning: missing braces around initializer
- 编译时出现大量的WARNING
- 为什么long l=123456789;float f=l;可以编译通过啊?
- const f=1.23;可编译时'initializing' : truncation from 'const double' to 'float' Why??
- 编译
- 看<<COM技术内幕>>第10章讲IDL,怎么玩MIDL编译器?




