Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 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.035 c
2-1136511035
Kolya
2006-01-06 04:30
2006.01.22
Удаление в ListView


2-1136379269
VadimSpb
2006-01-04 15:54
2006.01.22
Настройка SQL SERVER EXPRESS


2-1136225094
Sergey2005
2006-01-02 21:04
2006.01.22
JPG в BMP


11-1118060667
Ilnur
2005-06-06 16:24
2006.01.22
abort в KOL


1-1134367690
Atomic
2005-12-12 09:08
2006.01.22
Как в DateTimePicker програмно выделить месяц или год





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский