2011-02-07 3 views
1

У меня есть решение с двумя проектами в нем: одна простая dll с простым классом (dll_test). Второй проект ссылается на проект dll и должен использоваться для тестирования проекта dll (dll_tester). Проект dll строится отлично, но проект тестировщика всегда жалуется на невозможность найти dll_test. lib вместо dll_test. dll как и должно быть.Visual Studio 2008 C++. Проблема Ссылка на проект DLL

Опять же, это Visual Studio 2008 на машине под управлением Windows 7. Я не думаю, что это имеет значение, но я начал решение с проекта dll_test и позже добавил проект dll_tester.

Кто-нибудь знает, как это решить?

+0

Чтобы уточнить, вы добавили ** dll_test.lib ** в Properties-> Linker-> Input и его путь к Properties-> Linker-> Additional Library Directories? –

+0

Нет, я этого не делал. Но он не должен создавать lib, он должен создавать dll. –

+0

Вам необходимо иметь файлы заголовков, DLL-файл * и * соответствующий LIB-файл, чтобы статически ссылаться на проект DLL. Фактический код в DLL, конечно, но LIB-файл необходим, чтобы компоновщик мог ссылаться на DLL статически. Когда вы компилируете свой DLL-проект, компоновщик должен создавать DLL-файлы и их LIB-файлы. –

ответ

1

Ах, радостей библиотек DLL и зависимостей в Visual Studio. Клянусь, у C# -кодеров это легко :)

Вы уверены, что файл LIB на самом деле создан? Если ваш проект DLL не экспортирует какие-либо символы, вы не получите файл lib, и у вас не будет ничего, на что можно ссылаться. Таким образом, вы должны убедиться, что:

  1. Ваш DLL Project определяет нечто вроде MYPROJECTNAME_EXPORTS. Visual Studio определяет этот символ для вас, когда вы устанавливаете соответствующий флажок при создании проекта. Если вы этого не сделали, это довольно просто. Убедитесь в том, что вышеупомянутый символ в директивах препроцессора для вашей DLL, и в общем файле заголовка убедитесь, что следующий определяется:

    #if defined(MYPROJECTNAME_EXPORTS) 
    #define MYPROJECT_API __declspec(dllexport) 
    #else 
    #define MYPROJECT_API __declspec(dllimport) 
    #endif 
    
  2. После того, как мы знаем, что MYPROJECT_API надлежащим образом определены, мы должны убедиться, что любой класс или функции, которые мы хотим экспортировать, есть что в его декларации:

    class MYPROJECT_API SomeClass 
    { 
    }; // eo class SomeClass 
    

и этот класс должен быть реализован и на самом деле сделать что-то, что компилятор не оптимизирован.

Вкратце, причина, по которой вы не можете найти файл .lib, состоит в том, что ни один из них не был создан, потому что из него не были экспортированы никакие символы.

+0

Удивительный, спасибо. Не могу поверить, что я забыл что-то экспортировать: ^) –

0

правой кнопкой мыши dll_tester в обозревателе решений и смотреть «зависимостей Project ...» и убедитесь в том, что проект длл проверяется

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