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

Вниз

Проблема с получением из 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;
Скачать: CL | DM;

Наверх




Память: 0.48 MB
Время: 0.037 c
3-1132834861
MJShvedov
2005-11-24 15:21
2006.01.22
Как установить все значения в логическом столбце?


2-1135984359
ilifant
2005-12-31 02:12
2006.01.22
integer()


11-1117925548
rofl
2005-06-05 02:52
2006.01.22
Kol Memo (Editbox) limited to 30000 bytes of text


14-1135152597
vidiv
2005-12-21 11:09
2006.01.22
Автомагнитолла для академиков


2-1135880222
ezorcist
2005-12-29 21:17
2006.01.22
Запуск своего приложения с параметром