Как получить доступ к родному IDataObject

Я пытаюсь конвертировать Система :: Окна :: Forms :: IDataObject в родной IDataObject определяется в ObjIdl.h. К сожалению, следующий исходный код не возвращает родной IDataObject.

IntPtr pData = System::Runtime::InteropServices::Marshal::GetIUnknownForObject(e->Data);
::IDataObject* data = (::IDataObject*) pData.ToPointer();

Как я могу получить собственный IDataObject в приложении Windows Forms во время перетаскивания?

1

Решение

Приведение указателя COM-интерфейса с приведением в стиле C недопустимо. Вы должны хорошо спросить с помощью метода QueryInterface (). Как это:

 System::Windows::Forms::IDataObject^ obj = Clipboard::GetDataObject();
::IUnknown* punk = (::IUnknown*)System::Runtime::InteropServices::Marshal::GetIUnknownForObject(obj).ToPointer();
::IDataObject* pdata = nullptr;
HRESULT hr = punk->QueryInterface(__uuidof(::IDataObject), (void**)&pdata);
if (SUCCEEDED(hr)) {
// etc..
}
2

Другие решения

Других решений пока нет …

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector