| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > Visual C++/MFC/WTL > Совместимость dll |
| Автор: ICEMAN3141592 12.9.2011, 18:25 |
| Здравствуйте. Есть сервер, использует динамические библиотеки от MS Studio 2003, перехожу на MS Studio 2010, есть исходники. Если пересобрать проект, "новые" dll- ки схиляют для сервера. Какие могут быть варианты вообще ? Я честно говорю, что во внутренней структуре dll не разбираюсь. Надеюсь на Вашу помощь и профессионализм. |
| Автор: borisbn 13.9.2011, 06:14 |
| Если из сервера в длл (или наоборот) передаются stl-ные классы (или даже указатели на них), то с огромной долей вероятности работать не будет |
| Автор: ICEMAN3141592 13.9.2011, 08:55 |
| Во общем, есть сервер, не я его писал, даже не знаю устройство внутреннее его, НО он принимает dll, скомпилированную от VS 2003, если я исправлю исходники, из которых составляется эта dll в VS 2010, то примет "новую" dll сервер ? Читал на разных постах, что есть вар, что нет, но в большинстве случаев нормально, но я же не могу полагаться на то, что прокатит до поры до времени. |
| Автор: ICEMAN3141592 13.9.2011, 09:44 | ||
| 1. Тут высказывают надежду на stlport (ни разу о таком не слышал), если он используется, то переносимость будет соблюдаться ? 2. Скажите, как лучше поступить, если лицензий на 2003 нету, а поддерживать проект нужно... 3.
Извините, модераторы с другого форума не поняли сразу проблемы, и я подумал, что пишу о "сложных" вещах Добавлено через 8 минут и 48 секунд Посмотрел в *.vcproj о stlport, в файле слова такого нету Добавлено через 13 минут и 3 секунды Решили посмотреть, передаются ли stl-контейнеры или нет, с помощью midl компиллятор, преобразует интерфейсы из IDL в интерфейсы на C, после этого преобразованая проанализировать все вызовы будет нетрудно. Он нагенерит огромный файл Исходников сервера нету. |
| Автор: Earnest 13.9.2011, 12:53 |
| Наличие\отсутствие stl-вызовов и версия компилятора, под которым это все собиралось, никак не связаны. stl либо используется либо нет. Причем, если используется локально (для собственных нужд и нигде не светится в интерфейсах импортируемых функций), то и бог с ней. Ты бы уже давно скомпилировал библиотеку да проверил. Кстати, совершенно не факт, что код под 2003 так уже безболезненно скомпилируется под 2010. И даже если скомпилируется, то будет ожидаемым образом работать - есть ряд критичных изменений в поведении компилятора, при переходе с 2003 на более старшие. Но это с совместимостью библиотек не очень связано. Однако, если нужно переходить на новый компилятор и обеспечивать дальнейшее развитие \ поддержку, то вариантов особых нет. Кроме как остаться на 2003. Что касается совместимости, то проблемы могут быть в других используемых библиотеках, скажем, если используются динамические версии CRT и MFC. Опять же, эти проблемы возникнут, только если соответствующие объекты "пересекают" границы своих модулей. Скажем, память динамически выделяется в сервере (одна версия CRT), а освобождается в клиенте (другая версия CRT). Или наоборот. Вот тогда проблемы точно будут. Но грамотно спроектированные (для раздельной жизни) модули таких зависимостей содержать не должны. Нужно посмотреть на интерфейс (импортируемые функции). Добавлено через 3 минуты и 36 секунд Так у тебя COM-сервер? Тогда проблем быть не должно, разве что авторы сервера совсем уж м..ки. Никаких параметров типа stl-контейнеров в IDL быть не может. И чего на с-файл-то смотреть, гораздо проще смотреть сразу на IDL. Он как минимум компактнее. |
| Автор: borisbn 13.9.2011, 12:57 |
Поддерживаю. Без этого сказать точно "всё будет работать" или "точно работать не будет" сказать сложно. Показывай интерфейс. |
| Автор: ICEMAN3141592 13.9.2011, 15:33 | ||||||
Да когда я писал проект на VS 6.00, а потом пришлось переписывать на VS 2005, проблем было куча
Так если с совместимостью проблем нету, почему бы не продолжить на 2010 ?
Это один из примеров, есть файлы *.idl от MS, имеются файлы проекта xercesc. Мне нужны в них всех проверить наличие шаблонов STL ? СПАСИБО Earnest, borisbn за помощь, время которое уделяете. |
| Автор: ICEMAN3141592 13.9.2011, 15:49 | ||
Есть еще один файл такого же типа и все. Как я понял, передаются интерфейсы (или нет ?). Т.е. если я проект перенесу на 2010, скомпилирую dll, сервер, по идеи, должен будет с ней работать ? |
| Автор: borisbn 13.9.2011, 16:34 |
| Судя по всему, в интерфейсе длл присутствуют только простейшие типы (LPSTR, HRESULT, DWORD и т.п.). Упаковка есть тип вызова прописан явно в общем, интерфейс связи длл и сервера проработан хорошо. Должно всё отработать... Гарантию, конечно, не дам, но впечатление, что всё будет ОК Добавлено @ 16:37 Ещё нужно убедиться, что в настройках проекта 2003 и вновь создаваемого под 2010 установлена одинаковая кодировка: Not Set, Unicode или Multi-Byte. Т.е. нужно посмотреть, что выставлено в проекте 2003, и выставить такую же в 2010. |
| Автор: ICEMAN3141592 13.9.2011, 18:53 |
| Так, "одинаковая кодировка: Not Set, Unicode или Multi-Byte."- ясно, что - нибудь еще ? |
| Автор: borisbn 13.9.2011, 23:08 |
| Собственно, блюдо практически готово - др. словами - пора пробовать |
| Автор: Earnest 14.9.2011, 08:40 |
| Я же уже говорила, что если интерфейс чисто COM-овский, никаких stl и прочих классов там быть не может. Только встроенные типы, вариант, да простые структуры, причем определенные где-то там же. Насчет совместимости, есть еще один параметр компиляции, который надо проверить. "Treat wchar as buit-in type", как-то так называется, в районе Code generation или Language. Тоже должен быть одинаковым. А COM-строки (BSTR), если не ошибаюсь, всегда UNICODE... |