如何使用MingW编译的程序使用Windows便携设备(WPD)API?

时间:2014-08-02 22:09:26

标签: c++ windows wpd

我正在编写一个程序,可以自动完成在检测到可移动设备时必须完成的某些任务。最初只使用文件流。当我意识到并非所有可移动设备都能以这种方式访问​​时,我开始使用SHFileOperation,但现在我意识到即使使用这种方法也无法访问某些设备。

我想使用WPD API,但我的程序是使用MingW编译的,它使用的库也是使用MingW编译的。我看到的唯一两种可能性是重新编译Visual C ++的所有内容(我希望尽可能避免这种情况)或编写一个小的包装库,它将作为DLL编译,只能导出函数,并且可以从使用MingW编译的程序轻松链接即使DLL本身是用Visual C ++编译的(因此它可以使用WPD API)。

例如,如果有人知道已经包装了WPD的库,那将节省我很多时间。

1 个答案:

答案 0 :(得分:1)

我不认为您会找到WPD的任何通用包装器,因为API公开了可以直接从MinGW访问的COM接口。问题是没有MinGW兼容的头文件声明接口和相关类型。很少有可能的解决方案不涉及使用Microsoft的编译器:

  • 编写您自己的MinGW兼容标头。如果您只能从文档中执行此操作而不引用Microsoft的标题,那么您可以将它们提交给w32api包添加,以便其他人可以使用它们。
  • 复制Windows SDK版本的标头并删除所有阻止它们使用GCC进行编译的垃圾。旧版SDK中较旧版本的标头将删除较少的垃圾。
  • 创建包装SDK标头并使用宏来消除垃圾的标头。
  • 将OLE自动化接口用于WPD。 MinGW支持所有必需的COM接口(主要是IDispatch)。 Windows SDK文档briefly addresses此选项。