C ++ выставленные имена свойств не совпадают с именами, указанными в IDL - PullRequest
2 голосов
/ 08 ноября 2010

В файле IDL для компонента C ++ у меня есть что-то вроде следующего, позволяющее сделать свойство видимым для 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 Ответ

3 голосов
/ 08 ноября 2010

Я предполагаю, что это связано с тем фактом, что id имеет особое значение в IDL (как показывает ваш собственный пример) - если вам не нужно называть свое имущество с помощью ключевого слова IDL, я быпросто используйте другое имя.

Если вы по какой-то причине должны использовать это имя для свойства, вы можете использовать его в верхнем регистре, используя атрибут переименования ввремя импорта .

...