Здравствуйте, 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 и наслаждаться жизнью.
Здравствуйте, 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 интерфейс.