在.idl中定义了一个枚举类型
typedef [uuid(...)]
enum {
  defaultone = -1,
  firstone   = 0,
  secondone  = 1
}ElemEnum;定义一个method,
[id(1), helpstring("method TestMethod")] HRESULT TestMethod([in,optional,defaultvalue(-1)] ElemEnum _param);
编译是错误如下:
error C2440: 'default argument' : cannot convert from 'const int' to 'enum __MIDL___MIDL_itf_DataAdapter_0000_0001'
        Conversion to enumeration type requires an explicit cast (static_cast, C-style cast or function-style cast)
 不知道此处的参数值设为-1有什么不妥的地方,望高手赐教。

解决方案 »

  1.   

    试了一下,可以,不过我用OLEVIEW查看了msado15.dll的接口定义,许多使用枚举变量的地方默认值也是采用我上面所使用的方式,它们为什么可以呢?
    谢谢楼上的解答!最后会给分的。
      

  2.   

    用OLEVIEW查看类型库时,所有的枚举变量的默认值都会使用已经在类型库文件中记录好了的数字,它不会再专门查找对应枚举来多此一举。楼主可以用OLEVIEW查看自己生成的类型库,它应该也会是defaultvalue(-1)] 而不是楼主以为的defaultvalue(defaultone)]。类型库记录的不是源码,而是类型信息。