Как создать IDataObject?
От: M. Die  
Дата: 11.11.03 08:20
Оценка:
пробовал так
IDataObjectPtr Data;
hr = Data.CreateInstance( __uuidof(IDataObject));

или так

CComPtr<IDataObject> pData = NULL;
hr = pData.CoCreateInstance(IID_IDataObject);

в результате Data == NULL, hr == 0x80040154 (Class not registered).
В ole/com viewer он есть, лежит в ole32.dll

Просьба не пинать за глупый (наверное) вопрос.
Re: Как создать IDataObject?
От: azesh Россия  
Дата: 11.11.03 10:44
Оценка:
Здравствуйте, M. Die, Вы писали:

MD>пробовал так

MD>IDataObjectPtr Data;
MD>hr = Data.CreateInstance( __uuidof(IDataObject));

MD>или так


MD>CComPtr<IDataObject> pData = NULL;

MD>hr = pData.CoCreateInstance(IID_IDataObject);

ну на сколько я помню, ты так не можешь его создать, для того чтобы работать с методами IDataObject тебе нужно
сделать свой COM-обеъкт и пронаследовавшись от IDataObject реализовать его методы...

Но есть интерфейс в ATL IDataObjectImpl, в котором все уже реализовано. В итоге тебе, по-моему, надо будет создать свой COM-объект и пронаследоваться от IDataObjectImpl и наслаждаться жизнью.
Re: Как создать IDataObject?
От: Vi2 Удмуртия http://www.adem.ru
Дата: 11.11.03 12:15
Оценка:
Здравствуйте, M. Die, Вы писали:

MD>пробовал так

MD>IDataObjectPtr Data;
MD>hr = Data.CreateInstance( __uuidof(IDataObject));

MD>или так
MD>CComPtr<IDataObject> pData = NULL; 
MD>hr = pData.CoCreateInstance(IID_IDataObject);

MD>в результате Data == NULL, hr == 0x80040154 (Class not registered). В ole/com viewer он есть, лежит в ole32.dll

Интерфейс не создается, это нонсенс. Создается СОМ объект (или компонент), который предоставляет некий интерфейс. Это сленг, когда говорят "создать интерфейс". Да и метод называется CreateInstance, а не CreateInterface, не так ли?

А посему, чтобы пользоваться интерфейсом IDataObject (самому или передав другому), нужно иметь объект, который бы предоставил этот интерфейс.

Однако, СОМ библиотеки не предоставляют функции по созданию объекта, реализующего IDataObject, а только предоставляют код маршаллинга для этого интерфейса. Почему? Да потому, что любой объект, реализующий интерфейс IDataObject, рассматривается в СОМе как объект данных или источник данных. В самом СОМе таких объектов нет, потому что СОМ библиотекам нечего представлять в этом виде, т.е. СОМ библиотеки не выступают как источники данных.

Таким образом, тебе самому нужно создавать объект, свой объект. Ни у кого другого ты его взять не сможешь.

MSDN: Когда реализовывать IDataObject
Реализуйте IDataObject интерфейс, если Вы делаете контейнер или серверное приложение, которое способно к передаче данных. Например, если Ваше приложение позволяет данным быть вставленными (pasted) или сброшенными (dropped) в другое приложение, Вы должны реализовать IDataObject интерфейс. Сервера OLE составных документов, которые поддерживают внедренные (embedded) или связанные (linked) объекты, должны реализовать IDataObject интерфейс.

Vita
Выше головы не прыгнешь, ниже земли не упадешь, дальше границы не убежишь! © КВН НГУ
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.