Название: STL в QT конфликтует с STL в Borland Отправлено: nvrrus от Март 29, 2011, 14:50 Здравствуйте, уважаемые форумчане!
std::vector, созданный в qt передается по указателю в функцию библиотеки, собранной в Borland Builder. Там в него добавляется элемент, при добавлении ошибка: Segmentation Fault. Подскажите, пожалуйста, как быть? Название: Re: STL в QT конфликтует с STL в Borland Отправлено: Akon от Март 29, 2011, 14:54 STL специфицирована в плане интерфейсов, а не реализации. Другими словами, на бинарном уровне std::vector может быть представлен совершенно по-разному.
Используй C-array. Название: Re: STL в QT конфликтует с STL в Borland Отправлено: Пантер от Март 29, 2011, 14:56 В Qt нет STL.
И, да, STL не переносим между компиллерами. Название: Re: STL в QT конфликтует с STL в Borland Отправлено: nvrrus от Март 29, 2011, 15:14 Спасибо!
А есть ли смысл с одной стороны (Borland) и с другой (Qt) использовать один и тот же набор Stl, например Stlport? Пробую этот вариант - три конфликта. Одинаковые функции в Borland и Qt (InterlockedDecrement, InterlockedExchange, InterlockedIncrement) с разными параметрами. Есть смысл разрешать конфликт? И как это лучше сделать? Название: Re: STL в QT конфликтует с STL в Borland Отправлено: Akon от Март 29, 2011, 15:34 Если приложение и библиотека собраны разными компиляторами (даже одним компилятором но разных версий), то они в общем случае несовместимы.
Используй только C-экспорт из библиотек, например, вместо вектора передавай массив и его размер (vector.begin(), vector.size()). Если библиотека уже написана на Borland С++, то на нем же напиши враппер с C-экспортом, а исключения (например, std::runtime_error) преобразуй в коды ошибок. Название: Re: STL в QT конфликтует с STL в Borland Отправлено: nvrrus от Март 31, 2011, 09:44 Спасибо!
А есть ли способы все-таки использовать stl? Дело в том, что очень много работы было проделано по созданию интерфейса работы с запросами и предполагалось в использование stl. Сейчас отказываться от него - переписывать все библиотеки. Тем самым убивать все задумки эффективного и удобного использования библиотек. Название: Re: STL в QT конфликтует с STL в Borland Отправлено: Пантер от Март 31, 2011, 09:50 Ни от чего отказываться не нужно. Внутри используй stl сколько душе угодно, но во внешнем интерфейсе все должно быть без stl. Как пример:
Было Код Будет Код
Название: Re: STL в QT конфликтует с STL в Borland Отправлено: Akon от Март 31, 2011, 10:29 Цитировать Ни от чего отказываться не нужно. Внутри используй stl сколько душе угодно, но во внешнем интерфейсе все должно быть без stl Во внешнем интерфейсе все должно быть без C++, только С! Если есть исходный код библиотеки и он не завязан на специфике Borland (специфичные расширения компилятора, VCL, и т.п.), то его лучше перекомпилировать компилятором, которым будет компилироваться приложение (и скомпилирована Qt). Если библитеку перекомпилировать нельзя, то нужно писать C-врапперы. |