Никто в двух словах не подскажет (может midl синтаксис какой)
как сделать на ATL COM обьект с string-indexed Property
т.е. чтобы в VB например срабатывали конструкции вида
Здравствуйте dandreev, Вы писали:
D>Никто в двух словах не подскажет (может midl синтаксис какой) D>как сделать на ATL COM обьект с string-indexed Property D>т.е. чтобы в VB например срабатывали конструкции вида
D>instance["someValue"].maybe_funct()
Ну, этот синтаксис вообще ошибочен.
Или instance("someValue").maybe_funct()
или instance!someValue.maybe_funct()
В любом случае объект instance должен обладать свойством по-умолчанию, имеющем dispid=0
[id(0)] метод
или
[id(DISPID_VALUE)] метод
Причём нужно, чтобы в твоём случае этот метод (свойство) возвращал объект, т.е. указатель на некоторый интерфейс с функцией maybe_funct.
Спасибо, с этим разобрался. Но теперь другая проблема.
для конструкции for each завел метод _NewEnum, имплементировал IEnumVARIANT.
Но при вызове из VB for each type in list выводится сообщение RuntimeError 13 type mismatch
Может я что то упустил, и кроме имплементации _NewEnum (DISPID_NEWENUM) требуеттся еще какие нибудь действия чтобы заработал for each?
Здравствуйте dandreev, Вы писали:
D>Спасибо, с этим разобрался. Но теперь другая проблема. D>для конструкции for each завел метод _NewEnum, имплементировал IEnumVARIANT. D>Но при вызове из VB for each type in list выводится сообщение RuntimeError 13 type mismatch
D>Может я что то упустил, и кроме имплементации _NewEnum (DISPID_NEWENUM) требуеттся еще какие нибудь действия чтобы заработал for each?
GN>даст возможность писать GN>instance.метод("someValue").maybe_funct()
GN>а хочется GN>instance("someValue").maybe_funct()
GN>ps может быть ещё в IDL есть возможность написать, что функция ничего кроме S_OK никогда не возвращает?
Насколько я помню (хотя, вероятнее всего, как всегда ошибаюсь) то DISPID_VALUE == 0, таким макаром задается метод по умолчанию. Так что все вроде правильно
А>Насколько я помню (хотя, вероятнее всего, как всегда ошибаюсь) то DISPID_VALUE == 0, таким макаром задается метод по умолчанию. Так что все вроде правильно
мм.. почему-то даже в голову не пришло, что DISPID_VALUE — это стандартный макрос