CSDN首页 空间 新闻 论坛 Blog 下载 读书 网摘 搜索 .NET Java 视频 接项目 求职 在线学习 买书 程序员 通知
山寨机中的战斗机! 程序优化工程师到底对IT界有没有贡献
CSDN社区
搜索 收藏 打印 关闭
CSDN社区 >  VC/MFC >  ATL/ActiveX/COM

属性是一个float*类型,编译出现warning MIDL2039

楼主bojinyu(沙鱼)2002-11-20 14:10:46 在 VC/MFC / ATL/ActiveX/COM 提问

属性是一个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编译器?

关键词

  • c/c++
  • 映射
  • 属性
  • 自动化
  • 源码
  • vb
  • 类型
  • midl2039
  • gdarray
  • float

得分解答快速导航

  • 帖主:bojinyu
  • phiger
  • supperbeyond
  • cygroup
  • ComeAlong
  • nustchenhf
  • wei97081116
  • ComeAlong

相关链接

  • Visual C++类图书
  • Visual C++类源码下载

广告也精彩

反馈

请通过下述方式给我们反馈
反馈
提问
网站简介|广告服务|VIP资费标准|银行汇款帐号|网站地图|帮助|联系方式|诚聘英才|English|问题报告
北京创新乐知广告有限公司 版权所有, 京 ICP 证 070598 号
世纪乐知(北京)网络技术有限公司 提供技术支持
Copyright © 2000-2008, CSDN.NET, All Rights Reserved
GongshangLogo