ネイティブの WinRT コンポーネントで Engine と呼ばれるサード パーティの COM ベースのライブラリを使用しています。これは、後でサード パーティのライブラリのラッパーとして機能する必要があります。私のプロジェクトでは、Engine.lib とサード パーティの lib 用の Engine.h ファイルがセットアップされています。
次の cpp ファイルの LNK2019 を取得しています。
#include "pch.h"
#include "Engine.h"
void Component::Init()
{
ComPtr<IEngine> spEngine;
Settings settings;
CreateEngine(&settings, &spEngine);
}
コードは正常にコンパイルされ、Engine.lib は VS2012 のプロジェクト設定でセットアップされます。また、Engine.lib の DUMPBIN /EXPORTS は、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
何か案は?