Witam
Napisałem aplikacje a do niej zestaw bibliotek. Jedna z nich jest odpowiedzialna za sprawdzanie dostępności aktualizacji (lib1), w tym celu pobiera z sieci odpowiednie informacje i przystępuje do porównywania ich z wersjami plików zainstalowanych na komputerze.
Inna biblioteka (lib2) zawiera najczęściej wywoływane funkcje i procedury, jedną z nich jest GetVersion która wygląda dokładnie tak:
function getVersion(strFileName:pchar) : pchar; stdcall;
var
dwInfoSize, dwVerSize, dwWnd: DWORD;
FI: PVSFixedFileInfo;
ptrVerBuf: Pointer;
strVersion : string;
begin
dwInfoSize := getFileVersionInfoSize(strFileName, dwWnd);// <----out
begin
getMem( ptrVerBuf, dwInfoSize );
try
if getFileVersionInfo(strFileName, dwWnd, dwInfoSize, ptrVerBuf ) then
if verQueryValue( ptrVerBuf, '\', pointer(FI), dwVerSize ) then
strVersion :=
format( '%d.%d.%d.%d',
[ hiWord( FI.dwFileVersionMS ),
loWord( FI.dwFileVersionMS ),
hiWord( FI.dwFileVersionLS ),
loWord( FI.dwFileVersionLS ) ] );
finally
freeMem( ptrVerBuf );
end;
end;
Result := pchar(strVersion);
end;
Powyższa funkcje jest wywoływana statycznie przez bibliotekę lib1 w celu pobrania wersje pliku exe lub dll.
Wszystko działa poprawnie do momentu kiedy jako parametr funkcji wysyłana jest ścieżka do biblioteki lib1. Czyli gdy biblioteka lib1 chce sprawdzić poprzez funkcje w bibliotece lib2 wersje samej siebie to w momencie wykonania oznaczonej na listingu wyżej linii kodu, następuje wyłączenie się aplikacji która nakazała sprawdzenie aktualizacji. Gdy uruchomię tę aplikacje poprzez delphi (z debugowaniem) to wyłapywany jest w tym momencie błąd AV.
Czy ktoś z forumowiczów ma pomysł jak to obejść bez wielkich przebudów?
Pozdrawiam