我用了一个第三方的com组件,下面是其中一个对象Terminals在类型库中的相关信息:
[
uuid(AA7720C1-F1BA-11D1-B856-E4C106503E47)
]
coclass Terminals {
[default] dispinterface ITerminals;
};[
uuid(AA7720C0-F1BA-11D1-B856-E4C106503E47)
]
dispinterface ITerminals {
properties:
methods:
[id(0x00000001)]
long GetCount();
[id(0x00000002)]
IDispatch* GetActiveTerminal();
[id(0x00000003)]
IDispatch* GetItem(long index);
};从上面可以看到,这个对象实现ITerminals中的三个方法:
GetCount()
GetActiveTerminal();
GetItem(long index);
奇怪的是,在VB中调用的时候不能照搬原来的名称,必须把前面的get去掉,分别换成Count,ActiveTerminal,Item才行,而在delphi/BCB中使用的时候,必须用类型库中的名称进行调用.我不明白这是为什么,这可能涉及到不同的开发环境支持COM的机制的差异,哪位高手知道,请不吝赐教!
[
uuid(AA7720C1-F1BA-11D1-B856-E4C106503E47)
]
coclass Terminals {
[default] dispinterface ITerminals;
};[
uuid(AA7720C0-F1BA-11D1-B856-E4C106503E47)
]
dispinterface ITerminals {
properties:
methods:
[id(0x00000001)]
long GetCount();
[id(0x00000002)]
IDispatch* GetActiveTerminal();
[id(0x00000003)]
IDispatch* GetItem(long index);
};从上面可以看到,这个对象实现ITerminals中的三个方法:
GetCount()
GetActiveTerminal();
GetItem(long index);
奇怪的是,在VB中调用的时候不能照搬原来的名称,必须把前面的get去掉,分别换成Count,ActiveTerminal,Item才行,而在delphi/BCB中使用的时候,必须用类型库中的名称进行调用.我不明白这是为什么,这可能涉及到不同的开发环境支持COM的机制的差异,哪位高手知道,请不吝赐教!
vb一般都是直接调用属性的,所以不用Get。
倘若是VB做了转换,那么总要有一个转换的规则吧,把get打头的方法名前面的Get去掉,这算什么规则呢?
而且,也并不是所有get打头的方法都作了这个转换呀。
实在想不明白!
在使用#import生成的智能指针封装类中的表示方法是属性名(根据上下文自动判断调用Get/Set方法)和Get/Set+下划线+属性名
在VB中是根据上下文自动判断调用Get/Set方法。
看来想得到确切的答案没多大希望了,过几日就派分
原始定义在Interface.
--------------------------------------------------
你所贴的内容是被翻译的了.原版应是properties.--------------------------------------------------
并非VB的错,是你看走眼了.