Модераторы: Daevaorn

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Создать COM объект без библиотеки 
:(
    Опции темы
Konst
  Дата 10.9.2003, 08:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 23
Регистрация: 28.8.2003

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



В заголовочном файле описан интерфейс.
Код

namespace CommonInterface
{
[Guid("25561792-9219-4f26-9EE9-45D385B68269")]
public __gc __interface interface1
{
public: int ReturnInt();
};

[Guid("E2F8E5B0-D14E-45dd-9E72-1FF589195DA9")]
public __gc class class1:public interface1
{
public:
 int ReturnInt() {
            return 6;
 }
};
}

Как мне на основе этого интерфейса инициализировать COM объект прям в функции main? При этом что бы не экспортировать сначала в библиотеку, а потом ее подцеплять и из библиотеки инициализировать интерфейс!

PM MAIL   Вверх
RAN
Дата 10.9.2003, 12:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Экс. модератор
Сообщений: 709
Регистрация: 14.3.2003
Где: Щёлково Моск.обл.

Репутация: 5
Всего: 6



Не совсем понятно. Используй CoCreateInstance с указанием того интерфейса, который нужен. Или ты хочешь без реестра обойтись? Тогда можно попробывать загрузить dll COM-компанента и вызвать функцию DllGetClassObject.
PM MAIL ICQ   Вверх
DENNN
Дата 10.9.2003, 13:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


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

Репутация: 1
Всего: 43



Цитата
Как мне на основе этого интерфейса инициализировать COM объект прям в функции main

Именно main?
Была тут тема, навроде "Как инициализировать COM-библиотеку на чистом WinAPI.".
В двух словах сошлись на мнении, что лучше воспользоваться услугами готовых библиотек, чем отлаживать свой код.
PM ICQ   Вверх
Konst
Дата 10.9.2003, 17:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 23
Регистрация: 28.8.2003

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



Да. Тут видимо без библиотек не обойтись. sad.gif
PM MAIL   Вверх
Fantasist
Дата 11.9.2003, 02:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Лентяй
***


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

Репутация: 4
Всего: 41



Цитата
Была тут тема, навроде "Как инициализировать COM-библиотеку на чистом WinAPI."


А что там ее инициализировать? CoInitialize и все дела.

А если надо загрузить COM объект, тогда в простом случае подойдет LoadLibrary+DllGetClassObject.


--------------------
Волны гасят ветер...
PM MAIL   Вверх
Konst
Дата 11.9.2003, 04:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 23
Регистрация: 28.8.2003

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



2Fantasist
Ты видимо не так вопрос понял. Мне собственно нужно инициализировать instance. CoCreateInstance - создает мне COM на интерфейсе, который лежит в dll и еще прописан в регистрах. А я бы хотел создать COM объект на основе интерфейса, который у меня тут же описан в заголовочном файле, и зарегистрировать этот COM в ROT.
PM MAIL   Вверх
Konst
Дата 11.9.2003, 06:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 23
Регистрация: 28.8.2003

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



Как инициализировать COM-библиотеку на чистом WinAPI - не могу найти эту тему. Киньте ссылку пожалуйста.
PM MAIL   Вверх
RAN
Дата 11.9.2003, 08:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Экс. модератор
Сообщений: 709
Регистрация: 14.3.2003
Где: Щёлково Моск.обл.

Репутация: 5
Всего: 6



Это уже не COM. Это просто интерфейс:

namespace CommonInterface
{
public __gc __interface interface1
{
public: int ReturnInt();
};

public __gc class class1:public interface1
{
public:
int ReturnInt() {
return 6;
}
};
}

CommonInterface::class1 *obj = new CommonInterface::class1;

Вот тебе и объект obj, поддерживающий твой интерфейс

PM MAIL ICQ   Вверх
Konst
Дата 11.9.2003, 08:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 23
Регистрация: 28.8.2003

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



2RAN
А зарегистрировать в ROT этот объект можно? Мне это нужно, что бы из другого COM объекта получить ссылку на этот объект.
PM MAIL   Вверх
RAN
Дата 11.9.2003, 14:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Экс. модератор
Сообщений: 709
Регистрация: 14.3.2003
Где: Щёлково Моск.обл.

Репутация: 5
Всего: 6



RegisterActiveObject. Но надо, чтоб был реализован IUnknown.
PM MAIL ICQ   Вверх
Konst
Дата 11.9.2003, 14:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 23
Регистрация: 28.8.2003

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



RAN
Напиши пример. Я так пробовал. Но не выходило. Интерфейс, наследуемый через IUnknown делал. А как к нему гайд приписать? RegisterActiveObject как я понимаю требует CLSID, а ищет он этот идентификатор в регистре. А так как я из своего интерфейса библиотеку не делал, то ничего в регистрах и нет. И получается, что не регистрирует нифига (я просто подсовывал случайный гайд конечно, но надеялся, что он его привяжет к моему интерфейсу).
PM MAIL   Вверх
RAN
Дата 11.9.2003, 14:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Экс. модератор
Сообщений: 709
Регистрация: 14.3.2003
Где: Щёлково Моск.обл.

Репутация: 5
Всего: 6



Хм. Попробую когда время будет. Обещаю скоро ответить.
PM MAIL ICQ   Вверх
Fantasist
Дата 11.9.2003, 19:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Лентяй
***


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

Репутация: 4
Всего: 41



Опа, так у тебя получается локальный сервер? А IMarshal ты реализовал? Я так ведь понимаю, что библиотеки типов у тебя нету?

А так, что мешает тебе прописать в реестр необходимую инфу, прежде чем создавать свой объект и регестрировать его через RegisterActiveObject?


--------------------
Волны гасят ветер...
PM MAIL   Вверх
RAN
Дата 12.9.2003, 00:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Экс. модератор
Сообщений: 709
Регистрация: 14.3.2003
Где: Щёлково Моск.обл.

Репутация: 5
Всего: 6



Блин, а Fantasist прав. Придётся маршалер делать. Однако RegisterActiveObject регистрирует OLE-сервер и без записи в реестре. По крайней мере, возвращает 0. Так что, это реально, но сложно.
PM MAIL ICQ   Вверх
Fantasist
Дата 12.9.2003, 00:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Лентяй
***


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

Репутация: 4
Всего: 41



Цитата
Однако RegisterActiveObject регистрирует OLE-сервер и без записи в реестре


Я вообще-то тоже так думал, но никогда не проверял. На мой взгляд, в реестре информация нужна для создания объекта (т.е. нахождения кода объекта по ProgID/CLSID). Однако, после RegisterActiveObject ты пробывал вызвать GetActiveObject? Думаю, должно работать, но стоит убедиться. Правда дальше IUnknown/IDispatch не уедешь, но и этого должно хватить.


--------------------
Волны гасят ветер...
PM MAIL   Вверх
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С++:Общие вопросы"
Earnest Daevaorn

Добро пожаловать!

  • Черновик стандарта C++ (за октябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика(4.4мб).
  • Черновик стандарта C (за сентябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика (3.4мб).
  • Прежде чем задать вопрос, прочтите это и/или это!
  • Здесь хранится весь мировой запас ссылок на документы, связанные с C++ :)
  • Не брезгуйте пользоваться тегами [code=cpp][/code].
  • Пожалуйста, не просите написать за вас программы в этом разделе - для этого существует "Центр Помощи".
  • C++ FAQ

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Общие вопросы | Следующая тема »


 




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


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

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