Форум: "Начинающим";
Текущий архив: 2006.01.22;
Скачать: [xml.tar.bz2];
ВнизПроблема с получением из dll String значений Найти похожие ветки
← →
Dreamse (2006-01-06 11:48) [0]Пишу 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 12:34) [1]Уважаемый, Вы не педелитесь с восхищённой публикой секретом, указатель НА ЧТО возвращает эта функция?
function about:pchar;
begin
result:="";
end;
Просто интересно очень.
← →
Dreamse (2006-01-06 13:52) [2]Уже решил пробелему , нужно использовать заместо Pchar - ShortString и никаких проблем не будет.
← →
begin...end © (2006-01-06 16:36) [3]> Fay © (06.01.06 12:34) [1]
> указатель НА ЧТО возвращает эта функция?
На константу (пустую строку). А что?
:о)
← →
Fay © (2006-01-06 17:30) [4]2 begin...end © (06.01.06 16:36) [3]
> На константу
Глюки исключены?
← →
begin...end © (2006-01-06 17:54) [5]> Fay © (06.01.06 17:30) [4]
Если читать строку по адресу, возвращаемому функцией about, не выходя за границы строки, то никаких глюков быть не должно. Причём это относится к случаям с любой константной строкой, а не только пустой.
А вот если попытаться по этому адресу что-нибудь записать, будет ошибка. И это тоже относится к случаям с любой константной строкой.
Правда, ошибка может быть и при чтении -- если загрузить DLL динамически, сохранить в приложении возвращённый указатель, выгрузить DLL и после этого попытаться прочитать строку. Потому что строки на том месте уже может не быть (т.к. DLL уже выгружена).
P.S. Интересно, что в [0] и соглашения о вызове не совпадают, но это не вызовет ошибки в данном случае. По причине отсутствия передаваемых параметров.
:о)
← →
Fay © (2006-01-06 18:14) [6]2 begin...end © (06.01.06 17:54) [5]
Спасибо, сам я с этим не разбирался - всё-таки область применения функций видаabout
несколько ограничена 8)
Никогда бы не догадался, что код, в данном случае, будет специально содержать одинокий нулевой байт (так ведь?).
Страницы: 1 вся ветка
Форум: "Начинающим";
Текущий архив: 2006.01.22;
Скачать: [xml.tar.bz2];
Память: 0.46 MB
Время: 0.042 c