Pointer in Lazarus unter Mac OSX El Capitan

Pointer in Lazarus unter Mac OSX El Capitan

Beitragvon lazarusjulian » 6. Mär 2017, 22:26 Pointer in Lazarus unter Mac OSX El Capitan

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
lazarusjulian
 
Beiträge: 23
Registriert: 6. Jan 2016, 21:45

Beitragvon Mathias » 6. Mär 2017, 22:54 Re: Pointer in Lazarus unter Mac OSX El Capitan

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
Mathias
 
Beiträge: 2819
Registriert: 2. Jan 2014, 17:21
Wohnort: Schweiz
OS, Lazarus, FPC: Linux (die neusten Trunc) | 
CPU-Target: 64Bit
Nach oben

Beitragvon lazarusjulian » 6. Mär 2017, 23:12 Re: Pointer in Lazarus unter Mac OSX El Capitan

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 :)
lazarusjulian
 
Beiträge: 23
Registriert: 6. Jan 2016, 21:45

Beitragvon Mathias » 6. Mär 2017, 23:17 Re: Pointer in Lazarus unter Mac OSX El Capitan

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
Mathias
 
Beiträge: 2819
Registriert: 2. Jan 2014, 17:21
Wohnort: Schweiz
OS, Lazarus, FPC: Linux (die neusten Trunc) | 
CPU-Target: 64Bit
Nach oben

Beitragvon mischi » 7. Mär 2017, 08:55 Re: Pointer in Lazarus unter Mac OSX El Capitan

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
mischi
 
Beiträge: 150
Registriert: 10. Nov 2009, 18:49
OS, Lazarus, FPC: Mac OS X 10.10, 1.2.4, 2.6.4 | 
CPU-Target: 32Bit/64bit
Nach oben

Beitragvon lazarusjulian » 7. Mär 2017, 10:42 Re: Pointer in Lazarus unter Mac OSX El Capitan

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.
lazarusjulian
 
Beiträge: 23
Registriert: 6. Jan 2016, 21:45

Beitragvon mischi » 7. Mär 2017, 13:11 Re: Pointer in Lazarus unter Mac OSX El Capitan

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
mischi
 
Beiträge: 150
Registriert: 10. Nov 2009, 18:49
OS, Lazarus, FPC: Mac OS X 10.10, 1.2.4, 2.6.4 | 
CPU-Target: 32Bit/64bit
Nach oben

Beitragvon Mathias » 7. Mär 2017, 18:37 Re: Pointer in Lazarus unter Mac OSX El Capitan

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
Mathias
 
Beiträge: 2819
Registriert: 2. Jan 2014, 17:21
Wohnort: Schweiz
OS, Lazarus, FPC: Linux (die neusten Trunc) | 
CPU-Target: 64Bit
Nach oben

• Themenende •

Zurück zu MacOS



Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 1 Gast

porpoises-institution
accuracy-worried