1

System :: Windows :: Forms::IDataObjectをObjIdl.hで定義されたネイティブIDataObjectに変換しようとしています。残念ながら、次のソースコードはネイティブIDataObjectを返しません。

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

ドラッグアンドドロップ中にWindowsフォームアプリケーションでネイティブIDataObjectを取得するにはどうすればよいですか?

4

1 に答える 1

2

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..
 }
于 2012-11-01T15:58:55.153 に答える