Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Из класса С++ в Com 
:(
    Опции темы
Nastya
Дата 4.2.2005, 13:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Комодератор
Сообщений: 1287
Регистрация: 27.3.2002
Где: Мариуполь

Репутация: нет
Всего: 44



У меня есть обычный C++ -класс, не оконный, в нем никакие библиотеке кром stl могу ли я легким движение руки или несколькими пассами создать на его основе COM объект. Если да, то как?
Если нет, то что нужно сделать, что бы было да smile


--------------------
Что бы понять рекурсию, надо понять рекурсию

"Профессионал - это человек сделавший все возможные ошибки в очень узкой области". Н.Бор
PM MAIL   Вверх
Дрон
Дата 4.2.2005, 17:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Java-ненавистник :)
****


Профиль
Группа: Участник Клуба
Сообщений: 3179
Регистрация: 29.12.2002
Где: Санкт-Петербург

Репутация: нет
Всего: 93



Мне, кстати, тоже очень хотелось бы узнать smile


--------------------
Да. Именно так.
PM   Вверх
knave
Дата 25.3.2005, 18:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 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


--------------------
С наилучшими пожеланиями !!!
PM MAIL ICQ   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: COM/DCOM/ActiveX/ATL/CORBA | Следующая тема »


 




[ Время генерации скрипта: 0.0399 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.