如何访问本机IdataObject

How to get access to the native IDataObject

本文关键字:本机 IdataObject 访问 何访问      更新时间:2023-10-16

我正在尝试将System :: Windows :: forms :: iDataObject转换为OBJIDL.H中定义的本机IDATAObject。不幸的是,以下源代码不会返回本机IDATAOBJECT。

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

在拖放期间,如何在Windows表单应用程序中获取本机IDataObject?

用C风格铸件铸造COM接口指针是不合法的。您必须使用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..
 }