Здравствуйте, гость ( Вход | Регистрация )
rnd | Дата 9.11.2009, 21:45 |
вот хорошая статья про dll в windows: ссылка | |
DmP | Дата 9.11.2009, 13:02 |
если в dll я сделаю видимыми ф-ии уже логики класса, то это будет неверно идеологически Не обязательно делать видимой логику. Можно сделать структуры в нее засунуть все сишные обертки над абстрактным классом IServer, саму структуру засунуть в что то типа #pragma pack, и клиенту возвращать ссылку на эту таблицу, тогда будет некая гарантия что все сойдется и ошибок не будет. |
|
ssdmt | Дата 9.11.2009, 12:39 |
если в dll я сделаю видимыми ф-ии уже логики класса, то это будет неверно идеологически, нафик оно через одно место опять-то нужно? :) ведь хотели как лучше ... патаму есть тока одна ф-ия CreateMyClass(), а вот из него уже через абстрактный и тягаю нужную бизнесс-логику :), а вот она то как раз(ф-ии класса) и не хачит отрабатывать если filename.exe собрано в visual studio... балян-калян. вот как оно полное выглядит(очень приближённо):
|
|
DmP | Дата 9.11.2009, 12:01 |
ваще капец Из библиотеки экспортируй Сишные функции типа: extern "С" { void* CreateClass(); void RunClass(void*); } Должно работать. |
|
ssdmt | Дата 9.11.2009, 11:29 |
обычно нельзя смешивать программы/dll Qt собраные разными компиляторами. ваще капец |
|
Litkevich Yuriy | Дата 9.11.2009, 11:22 |
обычно нельзя смешивать программы/dll Qt собраные разными компиляторами. | |
ssdmt | Дата 9.11.2009, 10:43 |
Всем знатокам Qt однозначно привет!!! )) Входные данные: ------------------------- первое - у меня есть проект dll библотеки в Qt. второе - в этой dll экспортируется ф-ия extern "С" CMyClass* CreateDynamicMyClass(); ,которая динамически создаёт класс CMyClass третье - этот класс(CMyClass) наследуется от QTcpServer и имеет СИГНАЛЫ и СЛОТЫ, т.е. макрос Q_OBJECT ;) четвёртое - если filename.exe(тестовый проект без QCoreApplication - ПОЛНОСТЬ ГОЛЫЙ только LoadLibrary и GetProcAddress, console applic.) компилирую gcc, функция CreateDynamicMyClass() возвращает объект CMyClass и из него отрабатывает метод start() пример: CMyClass* class = dll->CreateDynamicMyClass(); // думаю мысль понятна :) class->start(); // ВСЁ ОТРАБАТЫВАЕТ КОРРЕКТНО!!! пятое - если filename.exe скомпилировать в Visual Studio 2008(так же полность "голый"), то всё - при вызове class->start() .. start имеет адресс по которому нельзя обратиться - код ошибки 5! .. ВОПРОСЫ: - кто нибудь сталкивался с такой ситуацией? почему таблица виртальных функций слетает?? в Visual Studio? P.S. не предлагать компилить в gcc, так как проект сам в Visual Studio и собрать его с помощью gcc просто нереально :( ... идея моя в том, чтобы сделать dll-qt библиотеку в которая даёт класс для работы с сокетами! для VisualStudio проекта! .. вот кто поможет на сотыч кину 200 руб ;) |
|
Просмотр темы полностью (откроется в новом окне) | |
Текстовая версия | Сейчас: 25.4.2024, 2:54 |