I have been working on getting a basic ATL project to compile in Visual Studio 2008 and I keep running into errors. Ultimately I have gotten stuck with the following build errors:
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
What am I overlooking or doing wrong? Here are the steps to reproduce.
- Create a new
ATL Project
namedSomeProject
. Accept all defaults. - Right-click the project in the Solution Explorer and select
Add > Class
. - Select
ATL Simple Object
and enterSomeObject
as its Short Name. Accept all other defaults.
At this points the project builds fine. However I want to split my IDL among multiple files for better organization (my IDL would be thousands of lines long).
- Right-click the project and select
Add > New Item
. - Select
Midl File
and enterISomeObject
as its filename. - Open
SomeProject.idl
and cut theISomeObject
interface declaration. Replace it withimport "ISomeObject.idl";
. - Paste the interface declaration in
ISomeObject.idl
.
In order to satisfy Microsoft's IDL compiler we need to change some options:
- Right-click the project and open its Properties. Go to the
MIDL > Output
section and enter the following values:- Header File:
$(InputName).h
- IID File:
$(InputName)_i.cpp
- Proxy File:
$(InputName)_p.cpp
- Generate Type Library:
No
- Header File:
- Go to the
C/C++ > Precompiled Headers
section and setCreate/Use Precompiled Header
toNot using Precompiled Header
. There are errors later if precompiled headers are used. - Select the
SomeProject.idl
file so that its properties are displayed. Go to theMIDL > Output
section and setGenerate Type Library
toYes
. - Remove
SomeProject_i.h
andSomeProject_i.c
from theGenerated Files
filter. - Add the following Existing Items to the
Generated Files
filter. You may need to attempt to compile the project first.SomeProject.h
SomeProject_i.cpp
ISomeObject.h
ISomeObject_i.cpp
Now, at this point I would expect the project to compile. But it doesn't. You should get the LNK1120
errors that I listed at the top of this question.
Any ideas? Am I overlooking something simple?