我在ATL中用属性化编程技术给我的组件添加一个枚举(enum),但为什么编译后VB里看不到这个枚举呢?现贴代码,请高手帮忙看一下,UP有分 [ 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,}; 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 注意,这此代码是在.h文件中的,不是.idl文件中的,是属性化编程技术!VS60的即放在.idl文件中的我会。谢谢各位了。 不会吧,这人坛里就没有高手了。难道各位大虾都不用属性化编程技术?难道大虾们编COM还在IDL中打滚!太可笑了吧! 各位大哥,可能我言语有些偏差,但我这个真的是急啊!我现在用的是VS70,默认属性化,所以IDL文件每编译一次就会自动生成一次。所以直接在IDL中用原有的VS60的知识添加代码是行不通的。各位大哥,如果有做过这个东西的,帮个忙吧,分我是一定会给的!再次向看过这个贴的大哥大姐们道谦! 你不是搞笑吗?在.h中让vb如何看得到..我的意见是必须在idl中 楼上可能误解我的意思了。我的意思是说,我编译成DLL后,用VB导入,然后对VB的对象浏览器来查看这个DLL中的所拥有的对象如果我的枚举被编译进DLL后,在这个浏览器中将会以一个黄色的图标表示,但我没发现,只发现DLL中的两个对象。真是不理解!help me!其实属性化编程在COM编程中确实具有很多优势,最起码我们不需要看那IDL文件了。还有interface可以随意修改,因为它与对象在一个头文件中 改成以下格式:/*[ 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 估计你没把定义写在类里,再把枚举定义在类的内部再试试不在类里的话enum STATE_WINDOW_TYPE 是出现在idl 中了,但是未出现在类型库一个tlb/dll文件可能包含多个类型库(也可能不包含类型库)VB/C#中加载模块时,是按类型库为单位引用的,不在库中的类型将不可见library TypelibName{ //要出现在这里才行} 多谢光荣大哥!问题已解决!总结如下:enum必须定义在某个类声明块的内部, enum属性中必须有[export],其它的也不要多加,多加了编译器会警告按理说,enum应该可以不用定义在一个类声明块的内部,只要再添加一些属性就应该可以。为什么不可以我不知道,可以是编译器的错误吧! 数据库类模块调用问题,急,在线等!(50分) 为什么超时仍不返回 新来的首次发问送分:csdn有没有离线包? VC调用DELPHI的DLL时HANDLE参数传递的问题,请进! 线程用在 串口通讯中 的一个问题,请教高手! Vc中怎么使程序开始运行时,窗口默认的界面最大 在线等待 神啊,救救我吧!怎么获取IE的内容(或者源文件),用IEHelper或者来个屏幕取词? 关于编程. 如何对一个socket限速??高分求教 如何在初始何时,默认选中一个工具栏上的CheckButton LPVOID定义的是什么样的变量? 请问各位高手,在VC的Tree Control中如何对软盘、USB进行刷新。
VS60的即放在.idl文件中的我会。
谢谢各位了。
我现在用的是VS70,默认属性化,所以IDL文件每编译一次就会自动生成一次。
所以直接在IDL中用原有的VS60的知识添加代码是行不通的。
各位大哥,如果有做过这个东西的,帮个忙吧,分我是一定会给的!再次向看过这个贴的大哥大姐们道谦!
我的意思是说,我编译成DLL后,
用VB导入,然后对VB的对象浏览器来查看这个DLL中的所拥有的对象
如果我的枚举被编译进DLL后,在这个浏览器中将会以一个黄色的图
标表示,但我没发现,只发现DLL中的两个对象。真是不理解!help me!其实属性化编程在COM编程中确实具有很多优势,最起码我们不需要看
那IDL文件了。还有interface可以随意修改,因为它与对象在一个头
文件中
/*
[
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
不在类里的话enum STATE_WINDOW_TYPE 是出现在idl 中了,但是未出现在类型库
一个tlb/dll文件可能包含多个类型库(也可能不包含类型库)
VB/C#中加载模块时,是按类型库为单位引用的,不在库中的类型将不可见library TypelibName
{
//要出现在这里才行
}
总结如下:enum必须定义在某个类声明块的内部,
enum属性中必须有[export],其它的也不要多加,多加了编译器会警告
按理说,enum应该可以不用定义在一个类声明块的内部,只要再添加一些属性就应该可以。
为什么不可以我不知道,可以是编译器的错误吧!