Я использую стороннюю библиотеку COM под названием Engine в нативном компоненте WinRT, который впоследствии должен выступать в качестве оболочки для сторонней библиотеки.
В моем проекте установлены файлы Engine.lib и Engine.h для сторонних библиотек.
Я получаю LNK2019 для моего следующего файла cpp:
#include "pch.h"#include "Engine.h"
void Component::Init()
{
ComPtr<IEngine> spEngine;
Settings settings;
CreateEngine(&settings, &spEngine);
}
Код компилируется нормально, и Engine.lib настраивается в настройках проекта VS2012. Также DUMPBIN / EXPORTS для Engine.lib показывает, что CreateEngine выставлен. Я также могу использовать другие типы, определенные в Engine.h, но как только вызывается CreateEngine, возникает ошибка компоновщика:
Error 1 error LNK2019: unresolved external symbol CreateEngine@8 referenced in function "public: virtual void __cdecl
Engine.h определяет CreateEngine следующим образом:
STDAPI CreateEngine(
_In_ Settings * pSettings,
_Outptr_ IEngine **ppEngine );
Где STDAPI — это обычный макрос:
#define STDAPI extern "C" HRESULT __stdcall
Есть идеи?
Разобрался с помощью Inspired: я использовал lib, собранную для ARM, с конфигурацией сборки x86. После изменения, что это связывание нормально.
Других решений пока нет …