Pointer in Lazarus unter Mac OSX El Capitan

Antworten
lazarusjulian
Beiträge: 39
Registriert: Mi 6. Jan 2016, 21:45

Pointer in Lazarus unter Mac OSX El Capitan

Beitrag von lazarusjulian »

Hallo Leute,

hab mir mal ein altes Macbook zum Spielen zugelegt und natürlich lag nichts näher, als meinen unter Windows geschriebenen BASS.DLL Player mal unter Mac OS zum Leben zu erwecken. Leider beschwert sich der Compiler bei jeglichen Prozeduraufrufen, in denen Pointer vorkommen.
Beispiel:

Code: Alles auswählen

stream := BASS_StreamCreateURL(url, 0, BASS_STREAM_AUTOFREE, @StatusProc, nil);


da bekomme ich die Meldung:

Code: Alles auswählen

unit1.pas(864,75) Error: Incompatible types: got "<address of procedure(Pointer;LongWord;Pointer);StdCall>" expected "<procedure variable type of procedure(Pointer;LongWord;Pointer);CDecl>"


Wie kann ich das beheben?

Danke im Voraus + Viele Grüße,
Julian

Mathias
Beiträge: 5008
Registriert: Do 2. Jan 2014, 17:21
OS, Lazarus, FPC: Linux (die neusten Trunc)
CPU-Target: 64Bit
Wohnort: Schweiz

Re: Pointer in Lazarus unter Mac OSX El Capitan

Beitrag von Mathias »

Irgendwo ist die BASS_StreamCreateURL deklariert, und dort muss noch ein Cdecl oder StdCall rein.

Code: Alles auswählen

stream := BASS_StreamCreateURL(url, 0, BASS_STREAM_AUTOFREE, @StatusProc, nil); Cdecl;
// oder
stream := BASS_StreamCreateURL(url, 0, BASS_STREAM_AUTOFREE, @StatusProc, nil); StdCall;
Mit Lazarus sehe ich gün
Mit Java und C/C++ sehe ich rot

lazarusjulian
Beiträge: 39
Registriert: Mi 6. Jan 2016, 21:45

Re: Pointer in Lazarus unter Mac OSX El Capitan

Beitrag von lazarusjulian »

Danke Mathias für diese Blitzantwort!! :wink:

Es lag nicht direkt an der StreamCreate, aber an der

Code: Alles auswählen

 
procedure LoopSyncProc(handle: HSYNC; channel, data:DWORD; user:pointer); StdCall; 
 


Wie genau diese Prozeduren zusammenhängen weiß ich selbst gar nicht mehr, aber daran lag es scheinbar. Cool, vielleicht bekomm' ich das doch heut noch zum Laufen :)

Mathias
Beiträge: 5008
Registriert: Do 2. Jan 2014, 17:21
OS, Lazarus, FPC: Linux (die neusten Trunc)
CPU-Target: 64Bit
Wohnort: Schweiz

Re: Pointer in Lazarus unter Mac OSX El Capitan

Beitrag von Mathias »

Der Grund ist, einmal verarbeitet der Kompiler in der Assembler-Ebene a. b, c, das andere mal c, b, a .

Code: Alles auswählen

procedure (a, b, c : integer)

So viel ich weis, ist Pascal und C++ gegenseitig verdreht.
Mit Lazarus sehe ich gün
Mit Java und C/C++ sehe ich rot

mischi
Beiträge: 206
Registriert: Di 10. Nov 2009, 18:49
OS, Lazarus, FPC: macOS, 10.13, lazarus 1.8.x, fpc 3.0.x
CPU-Target: 32Bit/64bit

Re: Pointer in Lazarus unter Mac OSX El Capitan

Beitrag von mischi »

Mathias hat geschrieben:Irgendwo ist die BASS_StreamCreateURL deklariert, und dort muss noch ein Cdecl oder StdCall rein.

Code: Alles auswählen

stream := BASS_StreamCreateURL(url, 0, BASS_STREAM_AUTOFREE, @StatusProc, nil); Cdecl;
// oder
stream := BASS_StreamCreateURL(url, 0, BASS_STREAM_AUTOFREE, @StatusProc, nil); StdCall;

Auf dem Mac nehm ich immer nur cdecl und nie StdCall und ich glaube, dass das auch so sein muss. Allerdings weiss ich die Begründung nicht mehr. Das wäre zumindest das erste, was ich ausprobieren würde. Die Fehlermeldung passt ja auch dazu.

Michael.
MiSchi macht die fink-Pakete

lazarusjulian
Beiträge: 39
Registriert: Mi 6. Jan 2016, 21:45

Re: Pointer in Lazarus unter Mac OSX El Capitan

Beitrag von lazarusjulian »

Ja vielen dank euch beiden, daran lag es :)

Hab jetzt leider ein anderes Problem was nicht mehr wirklich mit dem Thema zu tun hat, aber das Programm startet jetzt und schmiert sofort mit einem SIGSEGV ab..falls Jemand eine Idee hat (wie man der Sache auf den Grund gehen könnnte)..aber dazu brauchts wahrscheinlich eine Kristallkugel.

mischi
Beiträge: 206
Registriert: Di 10. Nov 2009, 18:49
OS, Lazarus, FPC: macOS, 10.13, lazarus 1.8.x, fpc 3.0.x
CPU-Target: 32Bit/64bit

Re: Pointer in Lazarus unter Mac OSX El Capitan

Beitrag von mischi »

lazarusjulian hat geschrieben:Ja vielen dank euch beiden, daran lag es :)

Hab jetzt leider ein anderes Problem was nicht mehr wirklich mit dem Thema zu tun hat, aber das Programm startet jetzt und schmiert sofort mit einem SIGSEGV ab..falls Jemand eine Idee hat (wie man der Sache auf den Grund gehen könnnte)..aber dazu brauchts wahrscheinlich eine Kristallkugel.

Leider ist es nicht so einfach den Debugger zum laufen zu bringen und ohne bleibt dir nur übrig, abzuspecken bis du etwas lauffähiges hast.
MiSchi macht die fink-Pakete

Mathias
Beiträge: 5008
Registriert: Do 2. Jan 2014, 17:21
OS, Lazarus, FPC: Linux (die neusten Trunc)
CPU-Target: 64Bit
Wohnort: Schweiz

Re: Pointer in Lazarus unter Mac OSX El Capitan

Beitrag von Mathias »

aber das Programm startet jetzt und schmiert sofort mit einem SIGSEGV ab.

Ich nehme für so was gerne eine Konsole, damit kann man gut Fehler eingrenzen.

Code: Alles auswählen

Writelen('vor SIGSEV');
Ichbinfalsch(a, b, c);


Bis zur Writeln-Ausgabe ist noch alles io.
Mit Lazarus sehe ich gün
Mit Java und C/C++ sehe ich rot

Antworten