Название: Проблема с dll-ками Отправлено: dr_Begemot от Август 14, 2009, 15:43 есть 2 dll-ки
1я dll представляет собой кнопку, которая размещается на форме и обладает некоторыми специфичными функциями. 2я представляет собой виджет использующий эту кнопку. Так же 1я dll с компилена в 2х вариантах - обычном и в варианте плагина, чтобы можно было работать с ней в Qt Disigner. в pro-файле 2й dll-ки подключаю 1ю: Код: #Добавление библиотеки SpecButton Код: SPECBUTTON_LIB = -lSpecButton Код: #Добавление библиотеки Plotter При компиляции теста компилятор ругается и указывает на: ui_PlotterView.h(30) : fatal error C1083: Cannot open include file: 'SpecButton.h': No such file or directory Фишка в том, что в ui_PlotterView.h, SpecButton.h подключен как #include "SpecButton.h" а не #include <SpecButton.h> Если же в тест подключить обе библиотеки то все ок. Ворос в том, что, как мне кажется, так не должно быть. Поскольку тест не должен ничего знать о кнопке, он просто подключает Plotter1.dll, но при прдключении plotter.h, доходит до SpecButton.h в кавычках(!), пытается ее найти и не получается. UPD.: Дело все таки не в кавыках или угловатых скобках... Даже если в <> то все равно тест требует путь до заголовочника той библиотеки, которая подключена ко 2й dll-ки... Что, так и должно быть? Название: Re: Проблема с dll-ками Отправлено: alex12 от Август 15, 2009, 13:05 В h-файле 2-ой dll-ки не должно быть никаких подключений от первой. Это должен быть публичный заголовок, описывающий только 2-ю dll-ку. В исходниках 2 dll-ки подключать заголовки первой можно только в cpp-файлы, или если очень надо, сделать служебный h-файл.
В случае с использованием ui-файлов подключать их надо без наследования. И обязательно пользоваться конструкциями dllimport dllexport (поищи по форуму). Название: Re: Проблема с dll-ками Отправлено: dr_Begemot от Август 16, 2009, 21:54 В h-файле 2-ой dll-ки не должно быть никаких подключений от первой. Это должен быть публичный заголовок, описывающий только 2-ю dll-ку. В исходниках 2 dll-ки подключать заголовки первой можно только в cpp-файлы, или если очень надо, сделать служебный h-файл. В случае с использованием ui-файлов подключать их надо без наследования. И обязательно пользоваться конструкциями dllimport dllexport (поищи по форуму). А как быть если в публичном заголовке 2й dll-ки описан класс, который использует (или наследует) класс(-ы) которые, в свою очередь, используют функционал описанный в 1й dll-ке??? "В исходниках 2 dll-ки подключать заголовки первой можно только в cpp-файлы, или если очень надо, сделать служебный h-файл." - а если надо унаследоваться от класса, который описан в 1й dll или использовать его? Не совсем понял про служебный h-файл? Чем он поможет? Не могли бы вы прояснить? Спасибо) Название: Re: Проблема с dll-ками Отправлено: alex12 от Август 18, 2009, 01:21 использует (или наследует) Использует и наследует - принципиальная разница. Можно использовать, не подключая h-файл используемого класса, например:a.h: Код
a.cpp: Код
Класс А использует B и C, но в h-файле только предварительная декларация (forwarding declaration). Можно использовать указатели и ссылки. При наследовании нельзя обойтись без подключения h-файла родителя т.к. компилятор должен знать внутреннюю структуру класса предка. По поводу служебных h-файлов надо поискать "техника d-указателей". Например, http://qt.osdn.org.ua/data-sharing.html |