Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Преобразование TCaption в Pchar


Страницы:   1 2

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]
ммм... что-то не то ( не должно быть так...


Страницы:   1 2

Наверх

Титульная страница Поиск, карта сайта Написать письмо