Bisher habe ich noch nicht sonderlich viel mit Interfaces gemacht, eigentlich fast nur abstrakte Klassen, wenn ich eine gleichwertige Funktionalität benötigt habe.
Ich habe eine Instanz einer Klasse, welche von einem Interface erbt. Diese wird irgendwann mal erstellt und irgendwann freigegeben. Nun habe ich folgendes Problem: Folgendes funktioniert nicht:
Code: Alles auswählen
const
  STest = '{982DE917-23B3-4FEF-B427-54E82D7866D5}';
 
type
  ITest = interface(IUnknown)
    [STest]
    procedure Test; stdcall;
  end;
 
  TTest = class(TInterfacedObject, ITest)
    public
      procedure Test; stdcall; virtual;
  end;
 
...
 
procedure TTest.Test; stdcall;
begin
  WriteLn('Test method called');
end;
 
var
  C: TTest; // Class instance
  I: ITest; // Interface instance. Diese wird irgendwann mal vom Nutzer angefordert.
 
begin
  C := TTest.Create;
  if C.GetInterface(STest, I) then begin
    I.Test;
  end
  else WriteLn('Error');
  ReadLn;
  C.Free; // Hier krachts
  ReadLn;
end.Es kracht mit RunError 204, was laut https://www.freepascal.org/docs-html/user/userap4.html folgendes ist:
Wieso ist das so und was kann ich da machen?https://www.freepascal.org/docs-html/user/userap4.html hat geschrieben: 204 Invalid pointer operation
You will get this in several cases:
• if you call Dispose or Freemem with an invalid pointer
• ...

 Verein
Verein 
 Links
Links Suche
Suche