首页 > 解决方案 > 具有多个 IsEqualGuid 定义的 OLE32 链接错误

问题描述

当我尝试在 Windows 上使用以下代码编译基于 COM 的应用程序时,传递-lole32给我的编译器时出现以下错误:

代码:

#include <shobjidl.h>
#include <windows.h>
#include <stdio.h>

const IID IID_ITaskbarList3 = {0xea1afb91, 0x9e28, 0x4b86, {0x90, 0xe9, 0x9e, 0x9f, 0x8a, 0x5e, 0xef, 0xaf}};

void *revery_register_icon_progress_win32() {
    ITaskbarList3 *tbl;
    CoCreateInstance(&CLSID_TaskbarList, NULL, CLSCTX_INPROC_SERVER,
                     &IID_ITaskbarList3, (void**)&tbl);
    return (void *)tbl;
}

错误:

/usr/x86_64-w64-mingw32/sys-root/mingw/include/guiddef.h:161: multiple definition of `IsEqualGUID'
C:/Users/Admin/AppData/Roaming/npm/node_modules/esy/node_modules/esy-bash/.cygwin/usr/x86_64-w64-mingw32/sys-root/mingw/lib/libole32.a(dwzns00301.o):(.text+0x0): first defined here
collect2: error: ld returned 1 exit status

我不确定如何解决这个问题,因为错误似乎不是我的代码,而是库本身。如果文件完全为空,我仍然会收到此错误。我能做些什么来解决这个问题吗?

编辑:我已经确定这是由于在我的程序中链接 DWrite 和 OLE32 引起的,即如果我只使用-ldwriteor-lole32编译,程序编译并且工作正常,但如果我同时包含两者,我最终会出现上述编译错误。这是一个问题,因为我的程序中需要两者。

标签: c++cwinapiole

解决方案


推荐阅读