Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Cross-Platform-Entwicklung (https://www.delphipraxis.net/91-cross-platform-entwicklung/)
-   -   Lazarus: SYNCPROC mit falschem Parameter (https://www.delphipraxis.net/181505-lazarus-syncproc-mit-falschem-parameter.html)

Philipp1977 20. Aug 2014 19:06


Lazarus: SYNCPROC mit falschem Parameter
 
Hallo,

folgende Zeile compiliert mit Delphi7 ohne Probleme...mit Lazarus gibts eine Fehlermeldung:

Code:
BASS_ChannelSetSync(chan, BASS_SYNC_META, 0, @MetaSync, nil);
Die Fehlermeldung kommt bei @MetaSync und zwar:

Error: Incompatible type for arg no. 4: Got "<address of procedure(LongWord,LongWord,LongWord,LongWord);Std Call>", expected "<procedure variable type of procedure(LongWord,LongWord,LongWord,Pointer);StdC all>"

Die Sync-Procedure ist wie folgt definiert:

procedure MetaSync(handle: HSYNC; channel, data, user: DWORD); stdcall;

Weiß jemand zufällig eine Lösung?

himitsu 20. Aug 2014 19:09

AW: Lazarus-Problem
 
Zitat:

Zitat von Philipp1977 (Beitrag 1269279)
Die Sync-Procedure ist wie folgt definiert:

Die Frage ist eher wie BASS_ChannelSetSync definiert ist.

Zitat:

Zitat von Philipp1977 (Beitrag 1269279)
Weiß jemand zufällig eine Lösung?

Wie wäre es, wenn du statt einem Pointer einen Integer (DWORD) übergibst? :roll:

nil, 0, typecast usw.


Oder mal den Idioten fragst, welcher das BASS_ChannelSetSync falsch deklariert hat.

Philipp1977 20. Aug 2014 19:16

AW: Lazarus-Problem
 
Das hat leider keine Änderung gebracht, dafür kommt jetzt ne neue Fehlermeldung:

Error: Incompatible type for arg no. 5: Got "ShortInt", expected "Pointer"

Aber das ist ja auch arg no.5, ursprünglich hatte er aber an arg no.4 rumgemeckert :-(

Philipp1977 20. Aug 2014 19:17

AW: Lazarus-Problem
 
Das ist übrigens die Definition:

HSYNC BASS_ChannelSetSync(
DWORD handle,
DWORD type,
QWORD param,
SYNCPROC *proc,
void *user
);

himitsu 20. Aug 2014 19:22

AW: Lazarus-Problem
 
War in der Zeile verruscht. :oops:
(hatte mich schon etwas gewundert, wegen den hier 4 und da 5 Parametern ... Fehler bei Parameter 4 passte aber auf beiden Seiten)

Die richtige Frage ist also "Wie ist der Typ SYNCPROC definiert?".


Zitat:

procedure MetaSync(handle: HSYNC; channel: DWORD; data, user: DWORD); stdcall

Philipp1977 20. Aug 2014 19:26

AW: Lazarus-Problem
 
Die kommt aus der Bass.dll und ist so definiert:

Code:
SYNCPROC = procedure(handle: HSYNC; channel, data: DWORD; user: Pointer); {$IFDEF MSWINDOWS}stdcall{$ELSE}cdecl{$ENDIF};

himitsu 20. Aug 2014 19:28

AW: Lazarus-Problem
 
Und nun schau mal, wie deine Funktion deklariert ist. :zwinker:
Zitat:

Die Sync-Procedure ist wie folgt definiert:

procedure MetaSync(handle: HSYNC; channel, data, user: DWORD); stdcall;

PS: Es wäre nett, wenn du dem ersten Beitrag einen anderen Titel gibst.
Stell die mal vor alle würden nur noch Delphi-Problem, .Net-Problem, HTML-Problem oder Lazarus-Problem da hinschreiben.

OrNEC 21. Aug 2014 08:35

AW: Lazarus-Problem
 
Ersetze die Zeile

Delphi-Quellcode:
{$mode objfpc}{$H+}

durch

Delphi-Quellcode:
{$mode delphi}{$H+}

und schon läuft alles wie eine 1.

P.S. ist sehr oft die 3. Zeile in jeder Unit.

Philipp1977 21. Aug 2014 13:48

AW: Lazarus-Problem
 
Danke für die Antwort :-) Sowohl die Tipps von OrNEC als auch von himitsu haben das Probelm gelöst.
Kann ich den Titel tatsächlich bearbeiten? Wenn ich beim ersten Beitrag auf bearbeiten klicke, kann ich nur den Beitrag bearbeiten aber nicht den Titel...

TBx 21. Aug 2014 14:05

AW: Lazarus-Problem
 
Klicke unten einmal auf erweitert, wenn Du im Bearbeiten bist, dann kannst Du auch den Titel editieren.


Alle Zeitangaben in WEZ +1. Es ist jetzt 17:26 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz