查找 imapi2 com 对象的 uuid/headers 或让 __uuidof 在 mingw 上工作

2023-12-24

我正在尝试从 mingw 项目访问 imapi2 com 对象。我试图遵循视觉工作室的例子。我在 Microsoft SDK 7.1 中找到了 imapi2 头文件,但它们似乎没有 uuid。我看到的示例是在创建对象时使用 __uuidof 查找 uuid。像这样:

CoCreateInstance(__uuidof(MsftDiscMaster2), NULL, CLSCTX_INPROC_SERVER, __uuidof(IDiscMaster2), (void**) &m_discMaster);

但我总是得到一个错误,因为 __uuidof 那是

对 _GUID const& __mingw_uuidof() 的未定义引用。

但 __mingw_uuidof 被定义为...

#define __CRT_UUID_DECL(type,l,w1,w2,b1,b2,b3,b4,b5,b6,b7,b8)           \
    extern "C++" {                                                      \
    template<> inline const GUID &__mingw_uuidof<type>() {              \
        static const IID __uuid_inst = {l,w1,w2, {b1,b2,b3,b4,b5,b6,b7,b8}}; \
        return __uuid_inst;                                             \
    }                                                                   \
    template<> inline const GUID &__mingw_uuidof<type*>() {             \
        return __mingw_uuidof<type>();                                  \
    }                                                                  \
    }

...在 _mingw.h 中,从“#define __uuidof(type) __mingw_uuidof<__typeof>()”开始几行

为什么 __mingw_uuidof 的 mingw 定义不起作用?

有没有办法在 sdk 头文件中找到像 DiscMaster 这样的 imapi 对象的 uuid?或者我需要获取其他头文件吗?

Thanks


Microsoft Platform SDK 中的 COM 接口通常由 .idl 文件定义,并使用 midl 从这些文件生成 .h 文件。因此,要查找 CLSID 或 IID 值,请搜索 idl 文件。在这种情况下,imapi2.idl 具有您需要的 guid,并且已使用它生成 imapi2.h 文件,其中包含:

class DECLSPEC_UUID("2735412E-7F64-5B0F-8F00-5D77AFBE261E")
MsftDiscMaster2;

Microsoft 编译器中的 __uuidof 扩展通过编译器特定的 declspec 语句读取附加到类或结构的编译器特定数据。您可以使用以下方法执行这些操作:

struct declspec(uuid("{......}")) IMyInterfaceType;

因此上面的 DECLSPEC_UUID 行将该 guid 附加到该类。

mingw 给出的示例代码提供了一个模板函数,如果您首先使用 __CRT_UUID_DECL 设置类型,它将返回给定类型的 uuid。他们可能有一个系统可以自动调用它,但没有显示。鉴于我在您的示例中看到的内容,要让 __uuidof 为给定的组件类工作,您需要添加:

__CRT_UUID_DECL(MsftDiscMaster2, 0x2735412e, 0x7f64, 0x5b0f, 0x8f, 0x00, 0x5d, 0x77, 0xaf, 0xbe, 0x26, 0x1e);

遵循该声明,您将得到一个定义__uuidof(MsftDiscMaster2)这将返回正确的 uuid。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

查找 imapi2 com 对象的 uuid/headers 或让 __uuidof 在 mingw 上工作 的相关文章

随机推荐

  • 如何在GtkTreeview中用字符串和pixbuf制作一列?

    我正在使用 Gtk 2 的应用程序中工作 我需要实现一个文件树视图 实际的代码是 public FileTree store new TreeStore 2 typeof string typeof string this change d
  • 定义一组(初始)Haar Like 特征

    当谈到级联分类器 使用类似 haar 的特征 时 我总是读到像 AdaBoosting 这样的方法用于选择 最佳 特征进行检测 然而 这仅在有一些初始功能集开始增强时才有效 给定 24x24 像素图像 有 162 336 个可能的 haar
  • 如何通过 Objective C 上传文件?

    我想问一个关于 iPhone 上的 Objective C 的问题 我想上传一个文件 实际上我将所有数据存储在 NSString 中 到服务器 但是 我不知道该怎么做 我查过Apple Developer的网站 我知道有一个函数叫做conn
  • 在sql server中将字符串转换为日期

    我如何转换YYYY MM DD 2012 08 17 到 SQL Server 中的约会 我在帮助页面上没有看到这种格式 http msdn microsoft com en us library ms187928 aspx http ms
  • Java 中的 Mysql 连接:用户 @ localhost 的访问被拒绝

    我无法连接到数据库 但我不知道为什么 因为用户名和密码是正确的 并且我可以在本地通过 phpmyadmin 连接 Class forName com mysql jdbc Driver Setup the connection with t
  • 如何实现数据表“分组依据”?

    我想为我的数据表实现 分组依据 有人有什么建议吗 update 时间 2019 03 09 标签 c net 2 0 您可以在 System Data DataSetExtensions 程序集中使用 linq 扩展 DataTable t
  • 如何找到距直线给定垂直距离处的点?

    我在窗口中画了一条线 然后让用户拖动它 因此 我的线由两点定义 x1 y1 和 x2 y2 但现在我想在线条的末端绘制 帽子 即在每个端点处绘制短垂直线 上限的长度应为 N 像素 因此 要在端点 x1 y1 处绘制 帽 线 我需要找到形成垂
  • react-native-reanimated 不接受以度为单位的旋转值

    我正在学习 reanimated 因为它在 UI 线程上工作 并且我想实现旋转动画 以度数旋转 如 45 度 不起作用并提示错误 那么如何在react native reanimation v1 version 1 中实现旋转动画呢 也许你
  • 无法使用 mongodb 插件版本 3.0.3 运行 Grails 应用程序

    我正在尝试将我的 mongodb 插件从 2 0 1 升级到 3 0 3 但是我不断收到以下错误 java lang NoClassDefFoundError com mongodb AggregationOptions at java l
  • spring security如何检索用户名[重复]

    这个问题在这里已经有答案了 可能的重复 使用 Spring Security 时 获取 bean 中当前用户名 即 SecurityContext 信息的正确方法是什么 https stackoverflow com questions 2
  • “奇怪的重复模板模式”的实际用途

    的一些实际用途是什么 奇怪的重复模板模式 http en wikipedia org wiki Curiously Recurring Template Pattern 这 计算类 http en wikipedia org wiki Cu
  • 如何重置 powershell 颜色

    我更改了 powershell 的颜色 现在我无法更改输入文本的颜色 总是yellow 我改变了背景的颜色和文字的颜色 背景颜色已正确更改 但显示文本中的颜色仍然是黄色 我可以做一些事情来重置颜色吗 方法一 CLI 命令 此 CLI 重置控
  • AngularJS reloadOnSearch 不起作用

    执行搜索并导航离开后 我希望用户能够返回到搜索页面 通过在浏览器中返回 并保留当前的搜索参数 我开始意识到 为了做到这一点 必须更新页面 url 以包含有关页面的数据 通过研究 我发现我可以使用更新位置 location并在使用进行更改时强
  • INSERT 触发器带有“ON CONFLICT DO NOTHING”

    我有一个INSERTPostgres 9 5 中的语句 但由于关键冲突 INSERT 有时实际上不会发生 我已经设置ON CONFLICT DO NOTHING在插入 If the INSERT发生了 那么触发器当然会运行 但如果INSER
  • Haskell 版本的 Idris !-表示法(爆炸表示法)

    我最近有幸学习了一些 Idris 我发现非常方便的一件事是 符号 https idris2 readthedocs io en latest tutorial interfaces html highlight do 20notation
  • bash PS1 提示符中的短日期

    您可以在 PS1 配置中使用 d 来显示长日期 即 5 月 18 日星期二 但我怎样才能让它以 18 05 2012 等格式显示呢 尝试包括 D d m Y 您可以使用以下支持的任何时间格式strftime 3
  • 我可以在 Windows 命令行中测试 tesseract ocr 吗?

    我是 tesseract OCR 新手 我尝试将图像转换为 tif 并运行它以查看在 Windows 中使用 cmd 的 tesseract 的输出 但我做不到 你能帮助我吗 将使用什么命令 这是我的示例图片 最简单的 tesseract
  • ocaml 任何类型匹配

    我正在尝试编写一个可以选择将函数作为参数的函数 let xxx extractor fun a gt a yyy 这最终有类型 val xxx extractor a gt a gt c gt 我的目的是让提取器成为一个从结构中提取信息的函
  • 为什么 forEach 应该优于常规迭代器?

    我正在读书爱彼迎 JavaScript 指南 https github com airbnb javascript 有一个特别的说法 说 不要使用迭代器 更喜欢 JavaScript 的高阶函数 而不是像 for in 或 for of 这
  • 查找 imapi2 com 对象的 uuid/headers 或让 __uuidof 在 mingw 上工作

    我正在尝试从 mingw 项目访问 imapi2 com 对象 我试图遵循视觉工作室的例子 我在 Microsoft SDK 7 1 中找到了 imapi2 头文件 但它们似乎没有 uuid 我看到的示例是在创建对象时使用 uuidof 查