Главная страница
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.062 c
14-1135441129
Витёк
2005-12-24 19:18
2006.01.22
Факториал больших чисел!


2-1136423835
Вороной
2006-01-05 04:17
2006.01.22
Как перевести на Дельфи этот алгоритм?


14-1135538589
Ihor Osov'yak
2005-12-25 22:23
2006.01.22
Есть пробел в знаниях.


2-1135921105
Alex7
2005-12-30 08:38
2006.01.22
Обращение к БД при активизации формы


4-1131518233
ART2005
2005-11-09 09:37
2006.01.22
Работа с запущенным процессом