C ++公开的属性名称与IDL中给出的名称不匹配

时间:2010-11-08 14:51:32

标签: c++ com midl

在C ++组件的IDL文件中,我有类似以下内容,允许该属性为COM可见:

interface IInterface
{
    [propget, id(1), helpstring("the ID")]
         HRESULT ID([out, retval] long *pVal);
}

当我构建dll并在OLEView中打开时,我看到这样的东西!?

interface IInterface
{
    [propget, id(0x00000001), helpstring("the ID")]
         HRESULT id([out, retval] long *pVal);
}

请注意, ID 显示为 ID 。但是,如果我修改此代码,说“ID2”,则 ID2 会按预期显示。然后我更改回“ID”,再次显示 id 。这对我来说非常困惑。机器上必须有一些东西,这意味着此属性的DLL暴露名称是小写的,但我在注册表中找不到任何内容。

有什么想法吗?很困惑......

1 个答案:

答案 0 :(得分:3)

我猜这与id has special meaning in IDL(如你自己的例子所示)这一事实有关 - 如果你不是必须使用IDL关键字命名你的属性,我只会使用不同的名字。< / p>

如果必须出于某种原因使用此名称作为属性,您可以使用rename attribute at import time以大写形式使用它。