![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Преобразование TCaption в Pchar
Fenix © (2006-03-09 19:55:00)У меня код:
TextTag:=PChar(form1.Edit1.Text+form1.Edit1.Text);
Возникает ошибка. form1.Edit1.Text возращает на 1 символ больше (символ конца строки). Как это можно обойти? Просто String я не могу пользоваться, т.к. у меня этот код используеться в Dll. Подскажите как можно раелизовать правиьно сложение строк?
Fenix (2006-03-09 22:24:00) [21]
> PCHar - это указатель, а на что ему указывать - надо правильно
> делать
> Так он указывает на мусор, который получился после выделения
> (и освобождения) локальной памяти для суммы строк.
Тогда как мне быть?? как мне правильно реализовать объединение и передачу строки?
Fenix (2006-03-09 22:23:00) [22]Вот я тоже думаю что не должно....а ошибка то выдаеться, притом если Edit'ы заполнены... если они пусты то все норм выдает...
Desdechado (2006-03-09 22:23:00) [23]PCHar - это указатель, а на что ему указывать - надо правильно делать
Так он указывает на мусор, который получился после выделения (и освобождения) локальной памяти для суммы строк.
tesseract (2006-03-09 22:18:00) [24]Вроде не должно, ежели texttag - глобальная переменная, это внутренние переменные при выходе освобождаются.
Desdechado (2006-03-09 22:14:00) [25]у тебя не лишние символы появляются, у тебя область памяти, на которую указывает PChar освобождается при выходе из процедуры, и там просто мусор остается
Fenix (2006-03-09 22:04:00) [26]
var
Form1: TForm1;
Texttag:Pchar;
implementation
{$R *.dfm}
procedure TForm1.Button1Click(Sender: TObject);
begin
if form1.CheckBox1.Checked then
TextTag:=PChar('< href='+form1.Edit2.Text+' title='+Form1.Edit1.Text+' target=_blank>'+form1.edit1.Text+'</a>')
else
TextTag:=PChar('< href='+form1.Edit2.Text+' title='+Form1.Edit1.Text+' >'+form1.edit1.Text+'</a>');
end;
Вот обработчик функци.....
Ошибка возникает именно когда Edit не пустые...
Desdechado (2006-03-09 22:02:00) [27]> Это в самой обаботки ДЛЛ Result:=TextTag;
ну, а саму функцию не желаешь показать
а ошибка в каком месте и при каком вызове?
Fenix (2006-03-09 22:01:00) [28]Когда я допустим в ДЛЛ пишу
TextTag:=PChar('asdfasdfafd'+'asdfasdf');
то он нормально объединяет строки
а когда
TextTag:=PChar(form1.Edit1.Text+form1.Edit2.Text);
то выдает ошибку....
Fenix (2006-03-09 21:53:00) [29]Эта функция у меня в ДЛЛ.
Это в Unit1(форма в ДЛЛ)
TextTag:=PChar(form1.Edit1.Text);
Это в самой обаботки ДЛЛ
Result:=TextTag;
tesseract (2006-03-09 21:49:00) [30]
> asdf\x14
а кто вам сказал, что это символ конца строки?
И вопрос откуда ты вызываешь свою функцию?
Fenix (2006-03-09 21:46:00) [31]raised exeption class EAccessViolation whith messange "Access Violetion at adress 00404133 in module project1.exe Read of adres 00d247b0"
> > form1.Edit1.Text возращает на 1 символ больше (символ
> конца строки).
> Не верю. Что в нем есть, то и возвращает.
Это когда эта строка находиться в ДЛЛ.... и пото заноситься в Richedit.
PChar(form1.Edit1.Text)
вот что этот код возращает (еще раз повторюсь, что этот код стоит в ДЛЛ)
asdf\x14
Desdechado (2006-03-09 21:23:00) [32]какая-то непоследовательность:
> Возникает ошибка.
текст ошибки
> form1.Edit1.Text возращает на 1 символ больше (символ конца строки).
Не верю. Что в нем есть, то и возвращает.