Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/127.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 基于COM的库的带有WinRT组件的未解析外部符号LNK2019_C++_Linker_Windows Runtime_Wrl - Fatal编程技术网

C++ 基于COM的库的带有WinRT组件的未解析外部符号LNK2019

C++ 基于COM的库的带有WinRT组件的未解析外部符号LNK2019,c++,linker,windows-runtime,wrl,C++,Linker,Windows Runtime,Wrl,我在本机WinRT组件中使用了一个名为Engine的基于第三方COM的库,该库稍后将用作第三方库的包装器。 第三方库的Engine.lib和Engine.h文件在我的项目中设置 我正在为我的以下cpp文件获取LNK2019: #include "pch.h" #include "Engine.h" void Component::Init() { ComPtr<IEngine> spEngine; Settings settings; CreateEngine(&setti

我在本机WinRT组件中使用了一个名为Engine的基于第三方COM的库,该库稍后将用作第三方库的包装器。 第三方库的Engine.lib和Engine.h文件在我的项目中设置

我正在为我的以下cpp文件获取LNK2019:

#include "pch.h"
#include "Engine.h"

void Component::Init()
{
ComPtr<IEngine> spEngine;
Settings settings;
CreateEngine(&settings, &spEngine);
}
Engine.h对CreateEngine的定义如下:

STDAPI CreateEngine(
    _In_ Settings * pSettings,
    _Outptr_ IEngine **ppEngine );
其中STDAPI是常用的宏:

#define STDAPI   extern "C" HRESULT __stdcall

有什么想法吗?

在Inspired的帮助下找到了答案:我使用的是为ARM构建的库,配置为x86构建。改变后,一切都很好

Engine.lib是否存在于链接器的命令行中?(VS2012允许查看链接器的命令行参数)dumpbin是否显示
CreateEngine@8
(带有尾随的
@8
)?不,dumpbin只显示CreateEngine。是的,链接器命令行显示Engine.lib作为OUT参数的一部分。Engine.lib中定义的其他类型,如IEngine或Settings,编译和链接都很好。后面的“@”是什么意思?(我已经有一段时间没有进行本机编码了;)您是否认为.lib和.h文件不匹配,因为DUMPBIN/EXPORTS将CreateEngine显示为export?尾部的
@8
来自
stdcall
约定,
8
意味着函数返回后必须从堆栈中弹出8个字节。这是大多数C编译器的
stdcall
的默认名称修饰。但是.lib文件不包含
@8
,这会产生错误。也许您应该在某个地方指定WinRT项目类型(它会禁用装饰吗?),或者.lib文件是用不同的编译器编译的。非常感谢。我认为WinRT项目类型应该是正确的。我使用Windows Phone。我将联系该第三方库的供应商,并要求更好的构建。
#define STDAPI   extern "C" HRESULT __stdcall