![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Проблема с получением из dll String значений [D6, WinXP]
Dreamse © (2006-01-06 11:48:00)Пишу dll
DLL - В функции в result возвращаеться строка сгенерёная компонентом , т.е неизвестной длины
uses
ShareMem
function about:pchar;
begin
result:='';
end;
В программе :
function about:pchar; stdcall; external 'sysinfo.dll';
Procedure Tdm.refresh_dll;
var
s_info:string;
begin
s_info:=about;
end;
В итоге из Dll постоянно выводиться неверное значение , в смысле строка ( правельная ) но с обрезаным окончанием , либо с окончанием набытым различными левыми символами.
Тут советовался , оворят не выделяю память под функцию ... но не знаю как это делать :( В чём проблема ?
Fay (2006-01-06 18:14:00) [1]2 begin...end © (06.01.06 17:54) [5]
Спасибо, сам я с этим не разбирался - всё-таки область применения функций видаabout
несколько ограничена 8)
Никогда бы не догадался, что код, в данном случае, будет специально содержать одинокий нулевой байт (так ведь?).
begin...end (2006-01-06 17:54:00) [2]> Fay © (06.01.06 17:30) [4]
Если читать строку по адресу, возвращаемому функцией about, не выходя за границы строки, то никаких глюков быть не должно. Причём это относится к случаям с любой константной строкой, а не только пустой.
А вот если попытаться по этому адресу что-нибудь записать, будет ошибка. И это тоже относится к случаям с любой константной строкой.
Правда, ошибка может быть и при чтении -- если загрузить DLL динамически, сохранить в приложении возвращённый указатель, выгрузить DLL и после этого попытаться прочитать строку. Потому что строки на том месте уже может не быть (т.к. DLL уже выгружена).
P.S. Интересно, что в [0] и соглашения о вызове не совпадают, но это не вызовет ошибки в данном случае. По причине отсутствия передаваемых параметров.
:о)
Fay (2006-01-06 17:30:00) [3]2 begin...end © (06.01.06 16:36) [3]
> На константу
Глюки исключены?
begin...end (2006-01-06 16:36:00) [4]> Fay © (06.01.06 12:34) [1]
> указатель НА ЧТО возвращает эта функция?
На константу (пустую строку). А что?
:о)
Dreamse (2006-01-06 13:52:00) [5]Уже решил пробелему , нужно использовать заместо Pchar - ShortString и никаких проблем не будет.
Fay (2006-01-06 12:34:00) [6]Уважаемый, Вы не педелитесь с восхищённой публикой секретом, указатель НА ЧТО возвращает эта функция?
function about:pchar;
begin
result:='';
end;
Просто интересно очень.