Я работал над созданием базового проекта ATL для компиляции в Visual Studio 2008 и продолжаю сталкиваться с ошибками. В итоге я застрял со следующими ошибками сборки:
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
.
Чтобы удовлетворить IDL-компилятор Microsoft, нам нужно изменить некоторые параметры:
- Щелкните правой кнопкой мыши проект и откройте его Свойства. Перейдите в раздел
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
ошибок, которые я перечислил в начале этого вопроса.
Есть идеи? Я пропускаю что-то простое?