最近要用atl做一个COM供别人在vb中使用
在这个COM组件中有一个接口使用枚举类型enum
我想在vb中使用这个COM组件的时候,可以出现这个枚举类型可选值的下拉列表,就象微软自己做的组件那样,可是我做的组件在vb中使用的时候,输入函数名后,不会出现枚举类型的可选值,这是为什么?谢谢
这个组件的IDL文件如下:(为什么在vb中使用callme函数,不出现枚举类型workdays的可选值列表?万分感谢)
import "oaidl.idl";
import "ocidl.idl";
typedef
[
uuid(F42ABD57-ECE8-42BF-AABF-E43FB0EF3933),
v1_enum,
helpstring("enum test")
]
enum {[helpstring("Monday")]Monday=2, [helpstring("Tuesday")]Tuesday=3, [helpstring("Wednesday")]Wednesday=4, [helpstring("Thursday")]Thursday=5, [helpstring("Friday")]Friday=6} workdays;

[
object,
uuid(3F180D78-6C50-47B6-A9E1-0E52A09023DE),
dual,
helpstring("Itestenum Interface"),
pointer_default(unique)
]
interface Itestenum : IDispatch
{
[id(1), helpstring("method CallMe")] HRESULT CallMe(workdays aaa);
[id(2), helpstring("method CallMe2")] HRESULT CallMe2(workdays * bbb);
[id(3), helpstring("method callme3")] HRESULT callme3(workdays aaa,workdays bbb);
[id(4), helpstring("method CallMe4")] HRESULT CallMe4([in] workdays ccc);


};
[
uuid(F42ABD57-ECE8-42BF-AABF-E43FB0EF3932),
version(1.0),
helpstring("enumtest2 1.0 Type Library")
]
library ENUMTEST2Lib
{
importlib("stdole32.tlb");
importlib("stdole2.tlb");
[
uuid(ACD866E5-21B0-4BE9-A024-C79CE18C41F7),
helpstring("testenum Class")
]
coclass testenum
{
[default] interface Itestenum;
};
};为什么在vb中使用callme函数,不出现枚举类型workdays的可选值列表?万分感谢

解决方案 »

  1.   

    try:
    typedef enum workdays
    {
        [helpstring("Monday")]Monday=2, 
        [helpstring("Tuesday")]Tuesday=3, 
        [helpstring("Wednesday")]Wednesday=4, 
        [helpstring("Thursday")]Thursday=5, 
        [helpstring("Friday")]Friday=6
    } workdays;
      

  2.   

    typedef enum WeekDay
    {
    [helpstring("MonDay")]Mon = 1,
    [helpstring("TuesDay")]Tues = 2,
    [helpstring("WedDay")]Wed = 3,
    [helpstring("TursDay")]Turs = 4,
    [helpstring("FriDay")]Fri = 5,
    [helpstring("StaDay")]Sta = 6,
    [helpstring("SunDay")]Sun = 7 }WeekDay;
      

  3.   

    这是visual studio中autpmation接口库的idl信息中关于enum的用法:    typedef [helpstring("Passed to Windows.Arrange to arrange the windows.")]
        enum {
            dsMinimize = 1,
            dsTileHorizontal = 2,
            dsTileVertical = 3,
            dsCascade = 4
        } DsArrangeStyle;