Форум: "Начинающим";
Текущий архив: 2005.11.20;
Скачать: [xml.tar.bz2];
Внизошибка при вызове функции из dll Найти похожие ветки
← →
syte_ser78 © (2005-10-31 14:22) [0]при вызове данной функции из файла проекта - все ок. При вызове ее же из библиотеки dll - invalid pointer operation, но необходимое значение всеже возвращается.
описываю при вызове из DLL -
function FileVersion(FileName:string): string; external "savchenko.dll";
Сама функция -
function FileVersion(FileName:string): string;
var
Buf: Pointer;
BufSize, Len, dwHandle: Cardinal;
VerInfo: PVSFixedFileInfo;
begin
Result := "";
BufSize := GetFileVersionInfoSize(PChar(FileName), dwHandle);
if BufSize <> 0 then
begin
GetMem(Buf, BufSize);
try
GetFileVersionInfo(PChar(FileName), dwHandle, BufSize, Buf);
VerQueryValue(Buf, "\", Pointer(VerInfo), Len);
with VerInfo^ do
Result := Format("%d.%d.%d.%d", [
dwFileVersionMS shr 16,
dwFileVersionMS and $FFFF,
dwFileVersionLS shr 16,
dwFileVersionLS and $FFFF]);
finally
FreeMem(Buf, BufSize);
end;
end;
end;
В чем ошибка?
← →
stone © (2005-10-31 14:32) [1]Ты когда свою библиотеку создавал это читал:
Important note about DLL memory management: ShareMem must be the
first unit in your library"s USES clause AND your project"s (select
Project-View Source) USES clause if your DLL exports any procedures or
functions that pass strings as parameters or function results. This
applies to all strings passed to and from your DLL--even those that
are nested in records and classes. ShareMem is the interface unit to
the BORLNDMM.DLL shared memory manager, which must be deployed along
with your DLL. To avoid using BORLNDMM.DLL, pass string information
using PChar or ShortString parameters.
← →
Digitman © (2005-10-31 14:33) [2]
> В чем ошибка?
в игнорировании тобой большущего комментария, который Делфи добавила в текст dll-проекта при его автосоздании
← →
Сайбель Алексей © (2005-10-31 22:40) [3]ShareMem
← →
Кефир87 © (2005-10-31 23:28) [4]Короче! String возвращать нельзя, испльзую PChar и считай что это то-же самое 8)
← →
wal © (2005-11-01 09:10) [5]
> [4] Кефир87 © (31.10.05 23:28)
> Короче! String возвращать нельзя, испльзую PChar и считай
> что это то-же самое 8)
Не совсем то же самое, с PChar еще и за памятью следить надо.
С уважением.
← →
evvcom © (2005-11-01 15:18) [6]
> Кефир87 © (31.10.05 23:28) [4]
> Короче! String возвращать нельзя
Ой, как категорично! Можно PChar, а можно и string.
← →
Кефир87 © (2005-11-01 19:57) [7]
> Ой, как категорично! Можно PChar, а можно и string.
Ну и что будет возврящать функция? Не будет же она все знаки распихивать по регистрам и пихать в стэк. Как это все работает надо спросить у BORLNDMM.DLL и вообще тоскать ее с собой (как я понял). Так что не надо париться и возвращать указатель!
А вот стринг для меня вообще нечто ненормальное! Вот понимаю PChar указатель, по которому последовательно находятся знаки и заканчивается это все нулем... А стринг... Динамический массив. Я им вообще не доверяю!!!
← →
evvcom © (2005-11-02 09:59) [8]
> Ну и что будет возврящать функция?
У автора она уже возвращает string.
> Не будет же она все знаки распихивать по регистрам и пихать в стэк.
Конечно, не будет.
> Так что не надо париться и возвращать указатель!
А string тоже указатель, да будет тебе известно, только немного особенный.
> А вот стринг для меня вообще нечто ненормальное!
Зря ты так. Удобная штука.
> А стринг... Динамический массив.
А PChar что? Статический по-твоему? Может быть тем же динамическим массивом, может указывать на статический массив символов. Только в случае динамического, этой динамикой приходится управлять самому, а не доверять эту рутину компилятору.
> Я им вообще не доверяю!!!
Это от непонимания. Имхо.
Страницы: 1 вся ветка
Форум: "Начинающим";
Текущий архив: 2005.11.20;
Скачать: [xml.tar.bz2];
Память: 0.47 MB
Время: 0.044 c