2012-01-03 3 views
0

У меня есть проект визуальной студии под названием MyKinectDll, который я компилирую как DLL. У меня есть другой проект под названием MyKinectApp, который является исполняемым. Я имею их в одном решении. Я добавил зависимость от MyKinectApp к MyKinectDll. Я добавил ссылку от MyKinectApp на MyKinectDll. Я добавил местоположение MyKinectDll в дополнительные каталоги включения MyKinectApp. Затем в моем коде я добавил #include «MyKinect.h», который является одним из заголовков в MyKinectDll, и он распознается. Но когда я компилирую, только MyKinectDll строит успешно, и я получаю ошибки в MyKinectApp, жалующиеся на отсутствие файлов заголовков. Эти файлы заголовков вызывается в MyKinect.h и присутствуют в другом месте MyKinectDll и правильно строятся сами по себе.Добавление DLL как статической библиотеки в Visual C++

Я не уверен, что мне нужно связать с .lib MyKinectDll в настройках компоновщика, но я попробовал, и я получаю ту же ошибку. Что я делаю не так?

Большое спасибо за помощь.

+0

Какие версии Visual Studio являются вы используете? Вы использовали '__declspec (dllexport)' для экспорта DLL-функций/классов из dll? –

+1

Вам нужно добавить расположение всех заголовков, используемых MyKinect.h, в Дополнительные каталоги Include для проекта MyKinectApp. – StevieG

+0

@StevieG, который решил это; Спасибо. Однако я не понимаю, зачем нужен этот шаг. Разумеется, dll должен стоять один и не требовать ссылки на ссылки в основном приложении? Я имею в виду, если я использую системную dll, я не беспокоюсь о включении всех путей, на которые у нее есть ссылки, не так ли? –

ответ

2

Вы должны добавить расположение всех заголовков, используемых MyKinect.h в Additional Include Directories для проекта MyKinectApp ..

Это потому, что вы ссылаетесь статически (который свяжет с Lib файл , а не dll). Компилятор должен искать в файлах заголовков библиотеки, к которой вы привязываетесь, чтобы видеть объявления класса/метода, поскольку они недоступны в файле lib.

Если вы связывая динамически, линкер может ссылаться на заявления класса/функции, как экспортируются в интерфейсе DLL, так что вам не нужно будет включать в себя каталоги заголовков в этом случае ..

Смежные вопросы