Visual Studio 2008でコンパイルする基本的なATLプロジェクトの取得に取り組んでいますが、エラーが発生し続けます。最終的に、次のビルドエラーでスタックしました。
1>Linking...
1> Creating library Debug\SomeProject.lib and object Debug\SomeProject.exp
1>dllmain.obj : error LNK2001: unresolved external symbol _LIBID_SomeProjectLib
1>SomeObject.obj : error LNK2001: unresolved external symbol _LIBID_SomeProjectLib
1>SomeObject.obj : error LNK2001: unresolved external symbol _IID_ISomeObject
1>Debug\SomeProject.dll : fatal error LNK1120: 2 unresolved externals
私は何を見落としているか、間違っているのですか?再現する手順は次のとおりです。
- 新しい
ATL Project
名前を作成しますSomeProject
。すべてのデフォルトを受け入れます。 - ソリューションエクスプローラーでプロジェクトを右クリックし、を選択します
Add > Class
。 - 短縮名として選択
ATL Simple Object
して入力します。SomeObject
他のすべてのデフォルトを受け入れます。
この時点で、プロジェクトは正常に構築されます。ただし、整理しやすくするためにIDLを複数のファイルに分割したいと思います(IDLは数千行の長さになります)。
- プロジェクトを右クリックして、を選択します
Add > New Item
。 - ファイル名として選択
Midl File
して入力します。ISomeObject
- インターフェイス宣言を開い
SomeProject.idl
て切り取ります。ISomeObject
に置き換えますimport "ISomeObject.idl";
。 - インターフェイス宣言をに貼り付けます
ISomeObject.idl
。
MicrosoftのIDLコンパイラを満たすには、いくつかのオプションを変更する必要があります。
- プロジェクトを右クリックして、そのプロパティを開きます。セクションに移動して
MIDL > Output
、次の値を入力します。- ヘッダーファイル:
$(InputName).h
- IIDファイル:
$(InputName)_i.cpp
- プロキシファイル:
$(InputName)_p.cpp
- タイプライブラリの生成:
No
- ヘッダーファイル:
- セクションに移動し、
C/C++ > Precompiled Headers
に設定Create/Use Precompiled Header
しNot using Precompiled Header
ます。プリコンパイル済みヘッダーを使用すると、後でエラーが発生します。 SomeProject.idl
プロパティが表示されるようにファイルを選択します。セクションに移動し、MIDL > Output
に設定Generate Type Library
しYes
ます。- フィルター
SomeProject_i.h
から取り外しSomeProject_i.c
ます。Generated Files
- 次の既存のアイテムを
Generated Files
フィルターに追加します。最初にプロジェクトのコンパイルを試みる必要があるかもしれません。SomeProject.h
SomeProject_i.cpp
ISomeObject.h
ISomeObject_i.cpp
さて、この時点で私はプロジェクトがコンパイルされることを期待します。しかし、そうではありません。LNK1120
この質問の上部にリストしたエラーが表示されるはずです。
何か案は?シンプルなものを見落としていますか?