Поиск:

Ответ в темуСоздание новой темы Создание опроса
> AnsiString в библиотеке. Ошибка при выходе, AnsiString локальная, статич. линковка 
:(
    Опции темы
Belerafon
Дата 4.7.2007, 10:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 6
Регистрация: 4.7.2007

Репутация: нет
Всего: нет



Re. Вопрос. BCB6. Делаю библиотеку и программу, ее использующую. Статическая линковка. Если в библиотеке начать использовать AnsiString (объявляю одну локальную переменную и никуда не передаю), то при выходе из основной программы получаю RunTime Error 204 (неправильный указатель). 

Вот код библиотеки: 
Код

#define _DLLMAINCPP
#include <windows.h>
#include <Classes.hpp>

#include "Zlib.h"

#pragma package(smart_init)
#pragma hdrstop

AnsiString test;

BOOL WINAPI DllMain(HINSTANCE hinstDLL, DWORD fwdreason, LPVOID lpvReserved)
{
    return 1;
}

void _export TestFunc(int test){

}







В основоной программе просто добавляю проект lib файл, а затем вызываю (просто так) TestFunc. При выходе из программы получаю ошибку. AnsiString, где бы не объявлял, вызывает ошибку. Без нее все работает. Пробовал sharemem, не помогает. Так же пробовал использовать класс TThread, при его объявлении такая же история. Хотя и программа и библиотека работают без проблем. Вот только при выходе...

Почему так? Какие еще варианты попробовать? Другие виды строк не устраивают - все равно нужно будет использовать TThread, а проблема судя по всему общая, что-то с классами...
PM MAIL   Вверх
Lazin
Дата 4.7.2007, 11:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 3820
Регистрация: 11.12.2006
Где: paranoid oil empi re

Репутация: 18
Всего: 154



А как линкуется RTL к библиотеке и программе?
(опция Lincker - Use dynamic RTL )
PM MAIL Skype GTalk   Вверх
JackYF
Дата 4.7.2007, 14:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


полуавантюрист
****


Профиль
Группа: Участник
Сообщений: 5814
Регистрация: 28.8.2004
Где: страна тысячи озё р

Репутация: 4
Всего: 162



Lazin, тебе надо подрубить, кажется, BCBMM.dll и lib, что-то вроде этого...
А вообще лучше не пользоваться передачей параметров AnsiString из/в библиотеке, об этом Борланд пишет (писала, по крайней мере).

Сделай лучше std::string или char* на худой конец.

Это сообщение отредактировал(а) JackYF - 4.7.2007, 14:24


--------------------
Пожаловаться на меня как модератора можно здесь.
PM MAIL Jabber   Вверх
Lazin
Дата 4.7.2007, 15:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 3820
Регистрация: 11.12.2006
Где: paranoid oil empi re

Репутация: 18
Всего: 154



Цитата

А вообще лучше не пользоваться передачей параметров AnsiString из/в библиотеке

при чём здесь это, он просто глобальную переменную создал, никуда не передавал. Ошибка происходит при её удалении.
PM MAIL Skype GTalk   Вверх
Fazil6
Дата 4.7.2007, 15:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1653
Регистрация: 3.5.2006
Где: Минск

Репутация: 11
Всего: 60



Цитата(JackYF @  4.7.2007,  14:23 Найти цитируемый пост)
А вообще лучше не пользоваться передачей параметров AnsiString из/в библиотеке, об этом Борланд пишет (писала, по крайней мере).Сделай лучше std::string или char* на худой конец.

ну во первых std::string по большому счету ничем не лучше AnsiString в таком варианте 
и во-вторых где ты тут видишь вообще передачу строк? 
PM MAIL   Вверх
Lazin
Дата 4.7.2007, 15:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 3820
Регистрация: 11.12.2006
Где: paranoid oil empi re

Репутация: 18
Всего: 154



можно попробовать с линковать dll и exe, с динамической CRTL, за удаление глобальных переменных именно она и отвечает.
PM MAIL Skype GTalk   Вверх
JackYF
Дата 4.7.2007, 15:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


полуавантюрист
****


Профиль
Группа: Участник
Сообщений: 5814
Регистрация: 28.8.2004
Где: страна тысячи озё р

Репутация: 4
Всего: 162



Цитата(Fazil6 @  4.7.2007,  15:11 Найти цитируемый пост)
и во-вторых где ты тут видишь вообще передачу строк?  

да, тут промазал. Пардон.

Цитата(Fazil6 @  4.7.2007,  15:11 Найти цитируемый пост)
ну во первых std::string по большому счету ничем не лучше AnsiString в таком варианте 

не спорю. Но попробовать стоит, может, уйдет ошибка.


--------------------
Пожаловаться на меня как модератора можно здесь.
PM MAIL Jabber   Вверх
Belerafon
Дата 6.7.2007, 10:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 6
Регистрация: 4.7.2007

Репутация: нет
Всего: нет



Спасибо. Проблема решилась снятием галочки "Use dynamic RTL" в основной программе. После этого ошибка попала.
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С++ Builder"
Rrader

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Литературу по С++ Builder обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Настоятельно рекомендуем заглянуть в DRKB (Delphi Russian Knowledge Base) - крупнейший в рунете сборник материалов по Дельфи


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Rrader.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C++ Builder | Следующая тема »


 




[ Время генерации скрипта: 0.1297 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.