[
export, 
v1_enum, 
uuid("A3F682D6-311C-472B-85F8-8B8CAFEFB24F"), 
helpstring ("STATE_WINDOW_TYPE")

enum STATE_WINDOW_TYPE
{
STATE_WINDOW_TYPE_MESSAGE = 0x00000001, 
STATE_WINDOW_TYPE_BUSY = 0x00000002, 
STATE_WINDOW_TYPE_OK = 0x00000004,
};

解决方案 »

  1.   

    注意,这此代码是在.h文件中的,不是.idl文件中的,是属性化编程技术!
    VS60的即放在.idl文件中的我会。
    谢谢各位了。
      

  2.   

    不会吧,这人坛里就没有高手了。难道各位大虾都不用属性化编程技术?难道大虾们编COM还在IDL中打滚!太可笑了吧!
      

  3.   

    各位大哥,可能我言语有些偏差,但我这个真的是急啊!
    我现在用的是VS70,默认属性化,所以IDL文件每编译一次就会自动生成一次。
    所以直接在IDL中用原有的VS60的知识添加代码是行不通的。
    各位大哥,如果有做过这个东西的,帮个忙吧,分我是一定会给的!再次向看过这个贴的大哥大姐们道谦!
      

  4.   

    你不是搞笑吗?在.h中让vb如何看得到..我的意见是必须在idl中
      

  5.   

    楼上可能误解我的意思了。
    我的意思是说,我编译成DLL后,
    用VB导入,然后对VB的对象浏览器来查看这个DLL中的所拥有的对象
    如果我的枚举被编译进DLL后,在这个浏览器中将会以一个黄色的图
    标表示,但我没发现,只发现DLL中的两个对象。真是不理解!help me!其实属性化编程在COM编程中确实具有很多优势,最起码我们不需要看
    那IDL文件了。还有interface可以随意修改,因为它与对象在一个头
    文件中
      

  6.   

    改成以下格式:
    /*
    [
      export
    ]
    enum STATE_WINDOW_TYPE
    {
      STATE_WINDOW_TYPE_MESSAGE   = 0x00000001, 
      STATE_WINDOW_TYPE_BUSY      = 0x00000002, 
      STATE_WINDOW_TYPE_OK        = 0x00000004,
    };
    /*    */
    参考:
    ms-help://MS.VSCC/MS.MSDNVS/vcattrib/html/vcrefTypedefStructEnumAttributes.htm
      

  7.   

    估计你没把定义写在类里,再把枚举定义在类的内部再试试
    不在类里的话enum STATE_WINDOW_TYPE 是出现在idl 中了,但是未出现在类型库
    一个tlb/dll文件可能包含多个类型库(也可能不包含类型库)
    VB/C#中加载模块时,是按类型库为单位引用的,不在库中的类型将不可见library TypelibName
    {
      //要出现在这里才行
    }
      

  8.   

    多谢光荣大哥!问题已解决!
    总结如下:enum必须定义在某个类声明块的内部,
              enum属性中必须有[export],其它的也不要多加,多加了编译器会警告
    按理说,enum应该可以不用定义在一个类声明块的内部,只要再添加一些属性就应该可以。
    为什么不可以我不知道,可以是编译器的错误吧!