![]() |
Здравствуйте, гость ( Вход | Регистрация )
![]() ![]() |
![]() |
ssdmt |
![]()
Сообщение
#1
|
Новичок Группа: Новичок Сообщений: 3 Регистрация: 9.11.2009 Пользователь №: 1214 Спасибо сказали: 0 раз(а) Репутация: ![]() ![]() ![]() |
Всем знатокам 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 руб ;) |
|
|
Litkevich Yuriy |
![]()
Сообщение
#2
|
![]() разработчик РЭА ![]() ![]() ![]() ![]() ![]() ![]() ![]() Группа: Сомодератор Сообщений: 9669 Регистрация: 9.1.2008 Из: Тюмень Пользователь №: 64 Спасибо сказали: 807 раз(а) Репутация: ![]() ![]() ![]() |
обычно нельзя смешивать программы/dll Qt собраные разными компиляторами.
|
|
|
ssdmt |
![]()
Сообщение
#3
|
Новичок Группа: Новичок Сообщений: 3 Регистрация: 9.11.2009 Пользователь №: 1214 Спасибо сказали: 0 раз(а) Репутация: ![]() ![]() ![]() |
|
|
|
DmP |
![]()
Сообщение
#4
|
Студент ![]() Группа: Участник Сообщений: 61 Регистрация: 11.3.2008 Пользователь №: 116 Спасибо сказали: 15 раз(а) Репутация: ![]() ![]() ![]() |
|
|
|
ssdmt |
![]()
Сообщение
#5
|
Новичок Группа: Новичок Сообщений: 3 Регистрация: 9.11.2009 Пользователь №: 1214 Спасибо сказали: 0 раз(а) Репутация: ![]() ![]() ![]() |
если в dll я сделаю видимыми ф-ии уже логики класса, то это будет неверно идеологически, нафик оно через одно место опять-то нужно? :) ведь хотели как лучше ... патаму есть тока одна ф-ия CreateMyClass(), а вот из него уже через абстрактный и тягаю нужную бизнесс-логику :), а вот она то как раз(ф-ии класса) и не хачит отрабатывать если filename.exe собрано в visual studio... балян-калян.
вот как оно полное выглядит(очень приближённо):
|
|
|
DmP |
![]()
Сообщение
#6
|
Студент ![]() Группа: Участник Сообщений: 61 Регистрация: 11.3.2008 Пользователь №: 116 Спасибо сказали: 15 раз(а) Репутация: ![]() ![]() ![]() |
если в dll я сделаю видимыми ф-ии уже логики класса, то это будет неверно идеологически Не обязательно делать видимой логику. Можно сделать структуры в нее засунуть все сишные обертки над абстрактным классом IServer, саму структуру засунуть в что то типа #pragma pack, и клиенту возвращать ссылку на эту таблицу, тогда будет некая гарантия что все сойдется и ошибок не будет. Сообщение отредактировал DmP - 9.11.2009, 13:03 |
|
|
rnd |
![]()
Сообщение
#7
|
Студент ![]() Группа: Участник Сообщений: 54 Регистрация: 22.7.2009 Пользователь №: 930 Спасибо сказали: 1 раз(а) Репутация: ![]() ![]() ![]() |
вот хорошая статья про dll в windows: ссылка
|
|
|
![]() ![]() ![]() |
![]() |
|
Текстовая версия | Сейчас: 15.3.2025, 17:20 |