Главная страница
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.028 c
9-1123357108
DeadMeat
2005-08-06 23:38
2006.01.22
OpenGL поколечат в Windows Vista..?


14-1135615175
Mystic
2005-12-26 19:39
2006.01.22
Небольшой вопросик по Delphi


2-1136395219
maxim123
2006-01-04 20:20
2006.01.22
WinAPI проблема с type


2-1135972219
Сергей_1
2005-12-30 22:50
2006.01.22
Программа в ХР глючит - в W98 нормально работает


14-1135765580
Gero
2005-12-28 13:26
2006.01.22
Debugger detected