![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Как правильно передать PChar из DLL [D7, XP]
Игорь © (2009-05-18 10:27:00)Подскажите как правильно передать PChar из DLL написанной в Delphi, как выделить память и потом освободить?
Anatoly Podgoretsky (2009-05-18 11:40:00) [1]Это кто еще завернул,
мастер тут ты.
Кто автор ДЛЛ.
Медвежонок Пятачок (2009-05-18 11:06:00) [2]эта отпадет, но появится та
Игорь (2009-05-18 11:04:00) [3]А если dll делать на c++ эта проблемма отпадает? Просто я в c++ ноль полный
Медвежонок Пятачок (2009-05-18 11:01:00) [4]он спросил не как выделять, а как вернуть пчар на уже выделенное
palva (2009-05-18 11:00:00) [5]Например, если вызывающая программа FireBird, а в dll у вас пользовательская функция, написанная на Delphi, то вы ОБЯЗАНЫ выделять память сишной функцией malloc, вызыванной из соответствующей dll. То есть для того, чтобы ответить на вопрос как корректно выделять, вы обязаны ответить на вопрос, как вы будете эту память освобождать. Ответ "В exe написанное любом" не прокатывает.
Медвежонок Пятачок (2009-05-18 10:55:00) [6]Имею длл, возвращающую пчар.
Исходников нет, и я не знаю время жизни строки в длл.
Зато я точно знаю, что на момент возврата строка там еще жива.
Поэтому делаю ее копию в хост-приложении и все. Никаких пролем.
Медвежонок Пятачок (2009-05-18 10:52:00) [7]а что смущает?
palva (2009-05-18 10:52:00) [8]
> В exe написанное любом
Если выделение происходит в dll а освобождение происходит неопределенным образом в вызывающей программе, тогда задача подбора правильного метода выделения неразрешима.
Игорь (2009-05-18 10:48:00) [9]
> Медвежонок Пятачок © (18.05.09 10:45) [4]
Ну ты и завернул Пятачок
Медвежонок Пятачок (2009-05-18 10:45:00) [10]разницы то нет куда и на чем оно
Игорь (2009-05-18 10:45:00) [11]Просто функцию импортировать из dll короче
Сергей М. (2009-05-18 10:45:00) [12]
> Игорь © (18.05.09 10:39) [3]
>
> без ShareMem
Тогда следует сначала определиться с соглашением об общем (используемом вызывающим и вызываемым модулями) менеджером памяти. Ибо при произвольном вызывающем модуле соглашение об использовании BMM (юнит ShareMem неявно использует именно его) сразу отпадает.
Игорь (2009-05-18 10:39:00) [13]
> Сергей М. © (18.05.09 10:34) [2]
В exe написанное любом, без ShareMem я имею ввиду
Сергей М. (2009-05-18 10:34:00) [14]
> из DLL написанной в Delphi
В куда написанное в чем ?
Медвежонок Пятачок (2009-05-18 10:29:00) [15]var s : string;
begin
.....
result := PChar(s);
....