harrybonn hat geschrieben:...
Interessant aber auch die Info von jus, eine XCode-Library zu laden, um so ein Problem zu lösen, was derzeit evtl. nicht bzw. in der gerade verwendeten Lazarus-Version nicht möglich ist.
[ Gibt es dazu auch hier irgendwo ein Beispiel wie man unter xcode eine DLL (oder wie sich das unter OS X so nennt) erzeugen und in Lazarus einbinden kann?]
Ich stelle die Library getosversion.dylib für Mac OSX zur Verfügung, wenn's wer brauchen kann. Ich habe 2 Versionen von GetMacOSVersion implementiert:
Code: Alles auswählen
GetMacOSVersion: function(): CFStringRef; cdecl;
GetMacOSVersion2: function(var systemVersionMajor:SInt32; var systemVersionMinor: SInt32; var systemVersionBugFix:SInt32): CFStringRef; cdecl;
GetMacOSVersion ... gibt eine sprachabhängige Zeichenkette als CFString zurück.
GetMacOSVersion2 ... gibt zusätzlich auch noch die Versionsinformation wie Major,Minor,Bugfix als Werte zurück.
Beim folgenden Beispiel ist auf einer Form nur ein Button und ein Memo-Feld drauf:
Code: Alles auswählen
unit Unit1;
{$mode objfpc}{$H+}
interface
uses
Classes, SysUtils, FileUtil, Forms, Controls, Graphics, Dialogs, StdCtrls,
dynlibs, MacOSAll, CarbonProc;
type
{ TForm1 }
TForm1 = class(TForm)
Button1: TButton;
Memo1: TMemo;
procedure Button1Click(Sender: TObject);
private
{ private declarations }
public
{ public declarations }
end;
var
Form1: TForm1;
H : TLibHandle;
GetMacOSVersion: function(): CFStringRef; cdecl;
GetMacOSVersion2: function(var systemVersionMajor:SInt32; var systemVersionMinor: SInt32; var systemVersionBugFix:SInt32): CFStringRef; cdecl;
implementation
{$R *.lfm}
{ TForm1 }
procedure TForm1.Button1Click(Sender: TObject);
var
cfs: CFStringRef;
s: String;
systemVersionMajor, systemVersionMinor, systemVersionBugFix: SInt32;
begin
H := LoadLibrary('/Users/mac/Desktop/getosversion.dylib'); //<------ den richtigen Pfad der Library eintragen
pointer(GetMacOSVersion) := GetProcedureAddress(H, 'GetMacOSVersion');
pointer(GetMacOSVersion2) := GetProcedureAddress(H, 'GetMacOSVersion2');
cfs:=GetMacOSVersion();
s:=CFStringToStr(cfs);
Memo1.Lines.Add('Mac Version (System): '+s);
cfs:=GetMacOSVersion2(systemVersionMajor, systemVersionMinor, systemVersionBugFix);
s:=CFStringToStr(cfs);
Memo1.Lines.Add('Mac Version (System): '+s);
Memo1.Lines.Add('Major: '+IntToStr(systemVersionMajor));
Memo1.Lines.Add('Minor: '+IntToStr(systemVersionMinor));
Memo1.Lines.Add('BugFix: '+IntToStr(systemVersionBugFix));
FreeLibrary(H);
end;
end.
Wie man am obigen Beispiel sieht, sollte man im USES-Teil "dynlibs, MacOSAll, CarbonProc" noch dazugeben. Wenn man das obige Beispiel direkt übernehmen möchte, muß man beim LOADLIBRARY dem Pfad, wo die "getosversion.dylib" auf der eigenen Platte liegt, anpassen.
Lg,
jus