Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2009.07.05;
Скачать: CL | DM;

Вниз

Как правильно передать PChar из DLL   Найти похожие ветки 

 
Игорь ©   (2009-05-18 10:27) [0]

Подскажите как правильно передать PChar из DLL написанной в Delphi, как выделить память и потом освободить?


 
Медвежонок Пятачок ©   (2009-05-18 10:29) [1]

var s : string;
begin
.....
result := PChar(s);
....


 
Сергей М. ©   (2009-05-18 10:34) [2]


> из DLL написанной в Delphi


В куда написанное в чем ?


 
Игорь ©   (2009-05-18 10:39) [3]


> Сергей М. ©   (18.05.09 10:34) [2]


В exe написанное любом, без ShareMem я имею ввиду


 
Медвежонок Пятачок ©   (2009-05-18 10:45) [4]

разницы то нет куда и на чем оно


 
Игорь ©   (2009-05-18 10:45) [5]

Просто функцию импортировать из dll короче


 
Сергей М. ©   (2009-05-18 10:45) [6]


> Игорь ©   (18.05.09 10:39) [3]
>
> без ShareMem


Тогда следует сначала определиться с соглашением об общем (используемом вызывающим и вызываемым модулями) менеджером памяти. Ибо при произвольном вызывающем модуле соглашение об использовании BMM (юнит ShareMem неявно использует именно его) сразу отпадает.


 
Игорь ©   (2009-05-18 10:48) [7]


> Медвежонок Пятачок ©   (18.05.09 10:45) [4]


Ну ты и завернул Пятачок


 
Медвежонок Пятачок ©   (2009-05-18 10:52) [8]

а что смущает?


 
palva ©   (2009-05-18 10:52) [9]


> В exe написанное любом

Если выделение происходит в dll а освобождение происходит неопределенным образом в вызывающей программе, тогда задача подбора правильного метода выделения неразрешима.


 
Медвежонок Пятачок ©   (2009-05-18 10:55) [10]

Имею длл, возвращающую пчар.
Исходников нет, и я не знаю время жизни строки в длл.
Зато я точно знаю, что на момент возврата строка там еще жива.
Поэтому делаю ее копию в хост-приложении и все. Никаких пролем.


 
palva ©   (2009-05-18 11:00) [11]

Например, если вызывающая программа FireBird, а в dll у вас пользовательская функция, написанная на Delphi, то вы ОБЯЗАНЫ выделять память сишной функцией malloc, вызыванной из соответствующей dll. То есть для того, чтобы ответить на вопрос как корректно выделять, вы обязаны ответить на вопрос, как вы будете эту память освобождать.  Ответ "В exe написанное любом" не прокатывает.


 
Медвежонок Пятачок ©   (2009-05-18 11:01) [12]

он спросил не как выделять, а как вернуть пчар на уже выделенное


 
Игорь ©   (2009-05-18 11:04) [13]

А если dll делать на c++ эта проблемма отпадает? Просто я в c++ ноль полный


 
Медвежонок Пятачок ©   (2009-05-18 11:06) [14]

эта отпадет, но появится та


 
Anatoly Podgoretsky ©   (2009-05-18 11:40) [15]

Это кто еще завернул,
мастер тут ты.
Кто автор ДЛЛ.



Страницы: 1 вся ветка

Текущий архив: 2009.07.05;
Скачать: CL | DM;

Наверх




Память: 0.49 MB
Время: 0.011 c
15-1241384653
Германн
2009-05-04 01:04
2009.07.05
Банальный вопрос. Архивация данных.


15-1241013895
andre17
2009-04-29 18:04
2009.07.05
Ошибка при работе с BOLD for Delphi


15-1240884969
dmk
2009-04-28 06:16
2009.07.05
PHP и параметры строки


15-1241555404
Юрий
2009-05-06 00:30
2009.07.05
С днем рождения ! 6 мая 2009 среда


2-1242423775
Xar
2009-05-16 01:42
2009.07.05
Поиск по строке Access