Witam.
Podczas wyłączania aplikacji wyrzuca mi bład o treści:
Exeption EInvalidPointer in module program.exe at 0000394D. Invalid pointer operation
Po tym komunikacie wyskakuje tabelka generowana przez turbodelphi:
... Exeption class EListError with message 'List index out of bounce (-1)'.
Używam biblioteki .dll, inicjowałem ją już na innym programie i działała. Jednak jedyną zmianą jaką wprowadziłem, było usunięcie z interfejsu akcji programu. Oto procedury inicjujące, kończące itp. borlandmm.dll umieściłem w katalogu biblioteki i wszystkie moduły mają zdeklarowane jako pierwsze ShareMem.
Interfejs:
unit aplikacja_intf;
interface
uses ShareMem,Dialogs;
type
IBiblIntf = interface
['{B13BFD1D-CD0F-4B0E-A810-1018E2B1F203}']
procedure Test();
end { IBiblIntf };
implementation
end.
Wywołanie wtyczki z poziomu programu i zamknięcie:
procedure Biblioteka_Laduj();
begin
{ Najpierw ładuję bibliotekę do pamięci }
hLib := LoadLibrary('optyk32.dll');
if hLib = 0 then
begin
RaiseLastOSError();
Abort()
end ;
{ Pobieram z biblioteki funkcje "Connect" i "Disconnect" }
fnConnect := GetProcAddress(hLib, 'Connect');
fnDisconnect := GetProcAddress(hLib, 'Disconnect');
if (@fnConnect = nil) or (@fnDisconnect = nil) then
begin
ShowMessage('Niepoprawna wtyczka');
Abort()
end ;
end;
procedure Biblioteka_Zwolnij();
begin
Disconnect();
{ Zwalniam interfejsy }
iBibl := nil;
FreeLibrary(hLib)
end;
Również potrzebne przy wywołaniu procedury Connect i Disconnect.
procedure Connect(out iBibl: IBiblIntf);
begin
giBibl := TOptyk32Impl.Create();
{ Przekazuję implementację wtyczki do programu }
iBibl := giBibl;
end;
procedure Disconnect();
begin
{ Zwalniam interfejsy }
giBibl := nil;
end;
Dodam, że uruchamiać - uruchamia się poprawnie. Problem ten występuje po wyłączeniu programu. Próbowałem zwalniać w momencie CloseQuery wraz z Application.Terminate, ale nic nie pomogło.
Nie wiem, co jeszcze może się przydać. Mam nadzieje, że ktoś pomoże. Moze to wina jakiejś procedury, ale wątpie bo żadnej nie wywołuje. Ograniczyłem się jedynie do inicjacji biblioteki do pamięci.
Pozdrawiam
intacto_