C++ 使用MingW编译的程序如何使用Windows便携式设备(WPD)API?
我正在编写一个程序,当检测到可移动设备时,自动执行一些必须完成的任务。最初只使用文件流。当我意识到并非所有可移动设备都可以通过这种方式访问时,我开始使用SHFileOperation,但现在我意识到,即使通过这种方法也无法访问某些设备 我想使用WPDAPI,但我的程序是使用MingW编译的,它使用的库也是使用MingW编译的。我看到的唯一两种可能是重新编译Visual C++的所有内容(如果可能的话,我想避免这种情况)或者编写一个小型的打包库,它将作为DLL编译,只导出函数,并且可以很容易地与MingW编译的程序链接,即使DLL本身是用VisualC++编写的(因此它可以使用WPDAPI)。C++ 使用MingW编译的程序如何使用Windows便携式设备(WPD)API?,c++,windows,wpd,C++,Windows,Wpd,我正在编写一个程序,当检测到可移动设备时,自动执行一些必须完成的任务。最初只使用文件流。当我意识到并非所有可移动设备都可以通过这种方式访问时,我开始使用SHFileOperation,但现在我意识到,即使通过这种方法也无法访问某些设备 我想使用WPDAPI,但我的程序是使用MingW编译的,它使用的库也是使用MingW编译的。我看到的唯一两种可能是重新编译Visual C++的所有内容(如果可能的话,我想避免这种情况)或者编写一个小型的打包库,它将作为DLL编译,只导出函数,并且可以很容易地与M
例如,如果有人知道一个库已经包装了WPD,这将节省我很多时间。我认为你不会找到任何WPD的通用包装,因为API公开了可以直接从MinGW访问的COM接口。问题是没有与MinGW兼容的头声明接口和相关类型。很少有可能的解决方案不涉及使用Microsoft编译器:
- 编写自己的与MinGW兼容的标题。如果您可以仅从文档中执行此操作,而不引用Microsoft的标题,那么您可以将它们提交到w32api包中,以便其他人可以使用它们
- 复制头的Windows SDK版本,并删除所有阻止它们使用GCC编译的垃圾。来自旧SDK的旧版本的标题将有更少的垃圾要删除
- 创建包装SDK标头的标头,并使用宏消除垃圾
- 将OLE自动化接口用于WPD。MinGW支持执行此操作所需的所有COM接口(主要是
)。Windows SDK文档支持此选项IDispatch
CoCreateInstance
(例如CLSID_PortableDeviceManager
)来获取创建WPD对象并获取其接口。因此,您应该能够获得其他接口和/或创建其他对象。MinGW支持此函数的CoCreateInstance
,链接到-lole32
。回到Windows 95的所有版本的Windows都支持OLE自动化。请注意,WPD不是Windows XP的一部分,用户需要先安装它。明白。如果1花费太多时间,我将尝试1或4。