Форум: "Основная";
Поиск по всему сайту: delphimaster.net;
Текущий архив: 2002.04.18;
Скачать: [xml.tar.bz2];




Вниз

Передать из DLL большую строку 


Fantasist   (2002-04-05 02:43) [13]

Ну че вы извращаетесь то. :) Клуб мазохистов? :D

Почему работает это:
Per:=PChar("Блин, ну когда уже заработает");

Потому что, в отличие от:
Per:=PChar(Form1.Memo1.Text);

Здесь не только возвращается адрес(его пока еще не существует), но и выделяется память. То есть вначале она выделяется, а потом возвращается адрес на эту память.Функции WinApi в таких случаях требуют от вас выделить память, прежде чем передавать им PChar.
Можно так и делать в вашем случае. Память можно выделить StrAlloc. Это можно, конечно, сделать и в dll, но тогда клиент должен сам заботиться об освобождении памяти.

Так как у вас здесь:

var Global_Var_PChar: String;
...
procedure MProcDLL(Per: PChar);
begin
try
Application.Create(TForm1, Form1);
Form1.Memo1.Add(Per);
Form1.ShowModal;
Global_Var_PChar:=Form1.Memo1.Text;
finally
Form1.Hide;
Form1.Free;
end;
Per:=PChar(Global_Var_PChar);
end;


Выглядит очень удобно, так как компилятор за вас производит необходимое выделение и освобождение памяти(операции с переменно string) Однако, вот так вот:
Per:=PChar(Global_Var_PChar);
Вы передаете адрес на ваш Glodal string и клиент использует этот адрес. Теперь если вы внезапно поменяете значение Global_Var_PChar в своей dll, то клиент с удивлением обнаружит, что его строка которую он получил из вашей dll изменилась сама собой без всяких действий с его стороны!




Форум: "Основная";
Поиск по всему сайту: delphimaster.net;
Текущий архив: 2002.04.18;
Скачать: [xml.tar.bz2];




Наверх





Память: 0.71 MB
Время: 0.031 c
3-57607           Anics                 2002-03-27 07:31  2002.04.18  
Запрет удаления записи в DBGrid нажатием Ctrl-Del


3-57663           Roman_Tutov@mail.ru   2002-03-28 16:29  2002.04.18  
date & time trouble


14-57846          Morfey                2002-03-09 14:45  2002.04.18  
Народ, а давайте игру соберём


3-57648           der                   2002-03-28 14:35  2002.04.18  
Создание таблицы по структуре описанной в ini файле. КАК?


3-57660           neodiX                2002-03-25 13:04  2002.04.18  
Problema v komponente TDataSetTableProducer