c++ - 如何访问 native IDataObject

标签 c++ .net visual-c++ com c++-cli

我正在尝试转换 System::Windows::Forms::IDataObject进入原生IDataObject在 ObjIdl.h 中定义。不幸的是,以下源代码不返回 native IDataObject。

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

如何在拖放过程中获取 Windows 窗体应用程序中的 native IDataObject?

最佳答案

使用 C 风格的转换来转换 COM 接口(interface)指针是不合法的。您必须使用 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..
 }

关于c++ - 如何访问 native IDataObject,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13178517/

相关文章:

visual-c++ - 从 MinGW 的 MSVC DLL 调用函数

c++ - 如何使用C++获取显示适配卡的内存大小?

C++ 代码与模板方法调用混淆

c++ - 使用 QFtp,中止 list() 命令

c++ - 如何禁用 Openscenegraph 几何节点中的状态属性?

.net - MDIParent 平铺 child

c++ - 构造函数不能访问自己类的私有(private)成员

c# - c++ 和 c# sin 函数大值的不同结果

.net - .NET上的线程安全阻止队列实现

c++ - 在 C++ 中填充一个数组