Главная страница
    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.46 MB
Время: 0.035 c
1-1134418291
Jenya
2005-12-12 23:11
2006.01.22
Изменить цвет строки в компоненте TlistView???


2-1136622058
rruussllaann
2006-01-07 11:20
2006.01.22
регистрация своего типа файла


2-1136223807
axel65
2006-01-02 20:43
2006.01.22
Символы


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


2-1136440995
ezorcist
2006-01-05 09:03
2006.01.22
Эмулировать клик мыши?





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский