1

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

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

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

4

1 回答 1

1

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

  • 编写您自己的 MinGW 兼容标头。如果您可以仅从文档中执行此操作而不参考 Microsoft 的标头,那么您可以将它们提交到 w32api 包中,以便其他人可以使用它们。
  • 复制标头的 Windows SDK 版本并删除所有阻止它们使用 GCC 编译的垃圾。来自旧 SDK 的旧版本标头将有更少的垃圾需要删除。
  • 创建包装 SDK 标头的标头并使用宏来消除垃圾。
  • 使用 WPD 的 OLE 自动化接口。IDispatchMinGW 支持执行此操作所需的所有 COM 接口(主要是)。Windows SDK 文档简要介绍了此选项。
于 2014-08-04T03:00:09.030 回答