![]() |
| ||
|
|
Новости |
Поиск |
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-10 23:14:00) [1]ясн спс))
Гаврила (2006-03-10 23:13:00) [2]//USES SHAREMEM, ... ;
function ShowForm:WideString;stdcall;
begin
Result:=memo2.Lines.Text;
end;
а это уже в программе:
richedit1.SelText:=Proc;
Fenix (2006-03-10 23:04:00) [3]У меня возникает ошика, когда я из длл посылаю TString в программу...
у меня код такой в длл:
function ShowForm:Tstrings;stdcall;
begin
Result:=TextTag;
end;
texttag:=memo2.Lines;
а это уже в программе:
richedit1.SelText:=Proc.Text;
и возникает ошибка с чтением из памяти...
Гаврила (2006-03-10 22:21:00) [4]
> Fenix ©
> TStrings?
Для того, чтобы такая штука, как передача объектаотработала нормально, мы должны собрать библиотеку и хост с соответствующим пакетом (package). при этом мы, разумеется, сделаем невозможным испольование библиотеки из программ, собранных на других языках программирования.
Поэтому лучше сделать так:
передавать тот же (вайд)стринг (или пчар), с разделителями #13#10 в нужных местах.
Стрингс с этим дружит хорошо также (см. свойство TStrings.Text - свойства рабтает и на чтение и на запись)
Fenix (2006-03-10 20:22:00) [5]У меня еще такой вопрос в добавок к теме...
Можноли из ДЛЛ предать не в Tstring, а в TStrings? Просто мне надо передать текст, не в одну строчку а разбитый на несколько, что бы не сбивалось его восприятие.
Гаврила (2006-03-10 20:19:00) [6]без T
function ShowForm(): WideString;
тип WideString похож на паскалевский string, за исключением
- он Unicode'ный
- он всегда создает копию при присвоениях (не нужен ShareMem, соответственно, менее оптимально по скорости, зато более универсально)
Fenix (2006-03-10 19:19:00) [7]> Гаврила ©
>советую внутри DLL все PChar убрать (а то дров наломаешь),заменить на >обычные строки,
Я так и сделал
> передавать из Dll в программу WideString
Типа
Function ShowForm():TWideString; ???
а потом в программе:
richedit1.seltext:=ShowForm();
так???
Leonid Troyanovsky (2006-03-10 16:51:00) [8]
> Гаврила © (10.03.06 16:46) [24]
> советую внутри DLL все PChar убрать (а то дров наломаешь),
> заменить на обычные строки,
> sharemem убрать,
Dll тоже убрать.
Все - ухожу, ухожу :)
--
Regards, LVT.
Гаврила (2006-03-10 16:46:00) [9]
> Fenix ©
советую внутри DLL все PChar убрать (а то дров наломаешь),заменить на обычные строки,
sharemem убрать,
передавать из Dll в программу WideString
Fenix (2006-03-10 16:20:00) [10]
> Гаврила ©
Все верно, мне как раз и надо что бы из ДЛЛ передалась строчка в мою программу :)
Гаврила (2006-03-10 16:18:00) [11]Ребята, не вводите в заблуждение.
ShareMem нужен только в том случае, если строковые параметры передаются между DLL и EXE
Внутри самой DLL строки можно использовать сколько влезет без всяких Sharemem'ов и прочего шаманства
Сергей М. (2006-03-10 15:44:00) [12]
> Так что получаеться можно использовать String?
Да, можно.
С соблюдением некоторых тонкостей, относящихся к внутреннему менеджменту памяти.
См. ShareMem vs Run-Time Packages
Stakan (2006-03-10 15:37:00) [13]Fenix © (10.03.06 15:26) [19]
Пост [17] читал внимательно? Всё понял?
Fenix (2006-03-10 15:26:00) [14]После закрытия программы выскакивает ошибка "invalid pointer operation". В чем может быть проблема?
Fenix (2006-03-10 14:47:00) [15]
> Stakan ©
ок сенки, так и сделаю))
Stakan (2006-03-10 14:45:00) [16]Fenix © (10.03.06 14:36) [16]
Можно, только не забыть uses ShareMem первымв списке uses и в exe и в dll в файле .dpr
Fenix (2006-03-10 14:36:00) [17]
> Сергей М. ©
Мои формы будут использоваться только в моей программе... Так что получаеться можно использовать String? Просто я читал, что там будут проблемы с размещением этих переменных в памяти...
Плохиш (2006-03-10 10:51:00) [18]
> Fenix © (09.03.06 21:46) [2]
> raised exeption class EAccessViolation whith messange "Access
> Violetion at adress 00404133 in module project1.exe Read
> of adres 00d247b0"
Можно узнать на какой конкретно строке и чему равны используемые переменные?
> Fenix © (09.03.06 22:04) [7]
> procedure TForm1.Button1Click(Sender: TObject);
> begin
> if form1.CheckBox1.Checked then
> TextTag:=PChar('< href='+ form1.Edit2.Text+
Руки бы повырывал.
Сергей М. (2006-03-10 09:38:00) [19]
> bred (10.03.06 05:00) [13]
> что-то не то ( не должно быть так
Именно то .. Именно так и происходит в дан.случае.
> Просто String я не могу пользоваться, т.к. у меня этот код
> используеться в Dll
String'ом нельзя пользоваться лишь в случае, когда DLL планируется к использованию в приложениях, построенных в иных средах нежели Делфи и BCB. У тебя этотслучай ?
bred (2006-03-10 05:00:00) [20]Desdechado © (09.03.06 22:23) [10]
ммм... что-то не то ( не должно быть так...