Funktionen aus einer Library ausrufen

Für Fragen zur Programmiersprache auf welcher Lazarus aufbaut
Antworten
RSE
Beiträge: 462
Registriert: Mi 30. Jul 2008, 13:11
OS, Lazarus, FPC: WinXP SP3 (L 0.9.28.2 FPC 2.2.4)
CPU-Target: 32Bit
Kontaktdaten:

Funktionen aus einer Library ausrufen

Beitrag von RSE »

Wie kann ich in der markierten Zeile die Funktion ausführen? Offenbar will FPC den Zeiger an MPlayer zuweisen, ich will aber das Funktionsergebnis zuweisen... Oder sind Funktionen in Librarys generell eine schlechte Idee? Ich möchte betriebssystem- und programmiersprachenunabhängig bleiben.

Code: Alles auswählen

type
  IMPlayer = interface
    ...
  end;
  TGetInterfaceForUI = function: IMPlayer; {$ifdef windows} stdcall; {$else} cdecl; {$endif}
var
  MPlayerHandle: TLibHandle;
  GetInterfaceForUI: TGetInterfaceForUI;
  MPlayer: IMPlayer;
begin
  MPlayerHandle := SafeLoadLibrary(UTF8ToSys(Application.Location+CPluginDir+CMPlayer));
  Pointer(GetInterfaceForUI) := GetProcedureAddress(MPlayerHandle,'GetInterfaceForUI');
  MPlayer := GetInterfaceForUI; // umain.pas(196,16) Error: Incompatible types: got "<procedure variable type of function:IMPlayer;StdCall>" expected "IMPlayer"
end;
Seit er seinen neuen Computer hat, löst er alle Probleme, die er vorher nicht hatte!

Hitman
Beiträge: 512
Registriert: Mo 25. Aug 2008, 18:17
OS, Lazarus, FPC: ArchLinux x86, WinVista x86-64, Lazarus 0.9.29, FPC 2.4.1
CPU-Target: x86
Wohnort: Chemnitz

Re: Funktionen aus einer Library ausrufen

Beitrag von Hitman »

Code: Alles auswählen

MPlayer := GetInterfaceForUI();

RSE
Beiträge: 462
Registriert: Mi 30. Jul 2008, 13:11
OS, Lazarus, FPC: WinXP SP3 (L 0.9.28.2 FPC 2.2.4)
CPU-Target: 32Bit
Kontaktdaten:

Re: Funktionen aus einer Library ausrufen

Beitrag von RSE »

Oha, irgendwoher kenne ich sowas... aber das es das auch in pascal gibt... Danke!
Seit er seinen neuen Computer hat, löst er alle Probleme, die er vorher nicht hatte!

Antworten