![]() |
|
|
![]()
|
|
| Nastya |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 1287 Регистрация: 27.3.2002 Где: Мариуполь Репутация: нет Всего: 44 |
У меня есть обычный C++ -класс, не оконный, в нем никакие библиотеке кром stl могу ли я легким движение руки или несколькими пассами создать на его основе COM объект. Если да, то как?
Если нет, то что нужно сделать, что бы было да -------------------- Что бы понять рекурсию, надо понять рекурсию "Профессионал - это человек сделавший все возможные ошибки в очень узкой области". Н.Бор |
|||
|
||||
| Дрон |
|
|||
![]() Java-ненавистник :) ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 3179 Регистрация: 29.12.2002 Где: Санкт-Петербург Репутация: нет Всего: 93 |
Мне, кстати, тоже очень хотелось бы узнать
-------------------- Да. Именно так. |
|||
|
||||
| knave |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 320 Регистрация: 6.3.2003 Где: Санкт-Питербург ( Россия) Репутация: 2 Всего: 5 |
Ком объект чаще всего выступает как обертка для обычных классов.
Создай ком объект, определи внем все нужные тебе методы и свойства, внути своего объекта определи член твоего класса. Ну и потмо в методах ком объекта вызывай методы твоего класса. Теперь самое главное - так делается для того чтобы ты мог/могла преобразовавать парметры приходящие в ком, в удобные для тебя типы. Чаще всего для совместимости со всеми языками ком объект имеет типы всех параметров VARIANT на вход и VARIANT* на выход. Если вы ваш объект собираеттесь использовать толок в С++ то для передачи параметров в ком можно использовать и обычные типы С++ и передавать параметры вашему классу на прямую. Если твой класс наприер хочет принять обычную С++ строку или массив. Тогда в методе ком объекта ты делаеш преобразование к нужному тебе типу и его уже передаеш метду твоего класса. Особая песня с возвратом данных. Если это строка или массив то надо его динамически создать, и заполнить тем что вернул метод твоего класса. За очистку памяти отвечает прилоение которое использует твой ком. Если исползуеш VARIANT то при чтении надо определить тип данных и преобразовывать, при возврате надо незабыть указать тип. Для простоты можно заюзать CComVariant для конвертации. Ниже пример со строками и массивом - с осталными типами проще. ....... TestMethod(VARIANT var1, VARINAT* retval) { ............. if (var1.vt = VT_BSTR) { //Преобразуем к однобайтовой строке из var1.pbstrVal; } else if (var1.vt = VT_BYREF | VT_I1) { //Читаем строку из var1.pcVal } else if (var1.vt = VT_ARRAY | VT_UI1) { // читаем масив байт из vt.parray.pData } //вызов твоего метода возвращаем строку retval.vt = VT_BSTR; retval.pbstr = SysAllocString("string"); } Массивы возвращаются через parray. Для создания массива используйте SafeArrayXXXXX. Используя описанный подход выши объекты будут работать везде правильно. Это сообщение отредактировал(а) knave - 25.3.2005, 18:56 -------------------- С наилучшими пожеланиями !!! |
|||
|
||||
![]()
|
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | C/C++: COM/DCOM/ActiveX/ATL/CORBA | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |