[gelöst:]BASS_ChannelSetSync im fpc-Mode

Für Probleme bezüglich Grafik, Audio, GL, ACS, ...
Antworten
lazarusjulian
Beiträge: 39
Registriert: Mi 6. Jan 2016, 21:45

[gelöst:]BASS_ChannelSetSync im fpc-Mode

Beitrag von lazarusjulian »

Hallo,

ich möchte folgenden Befehl, welcher mit der Delphi Version der Bass.dll funktioniert

Code: Alles auswählen

 lsync := BASS_ChannelSetSync(chan,BASS_SYNC_POS or BASS_SYNC_MIXTIME,FSelEnd,LoopSyncProc,0); 


..und in der Bass.dll folgendermaßen deklariert ist:

Code: Alles auswählen

  function BASS_ChannelSetSync(handle: DWORD; stype: DWORD; param: QWORD; proc: SYNCPROC; user: DWORD): HSYNC; stdcall; external bassdll;  



nun in der Lazarus-Version (lazdynamic_bass) der Bass.dll benutzen.
Dort ist der Befehl folgendermaßen deklariert:

Code: Alles auswählen

 var BASS_ChannelSetSync:function(handle: DWORD; type_: DWORD; param: QWORD; proc: SYNCPROC; user: Pointer): HSYNC; {$IFDEF WIN32}stdcall{$ELSE}cdecl{$ENDIF};  


Code: Alles auswählen

 lsync := BASS_ChannelSetSync(chan,BASS_SYNC_POS or BASS_SYNC_MIXTIME,FSelEnd,LoopSyncProc,nil); //so geht es nicht, Fehlermeldung: 
unit1.pas(295,80) Error: Wrong number of parameters specified for call to "LoopSyncProc"



Code: Alles auswählen

 lsync := BASS_ChannelSetSync(chan,BASS_SYNC_POS or BASS_SYNC_MIXTIME,FSelEnd,@LoopSyncProc,nil); //so auch nicht, Fehlermeldung:
unit1.pas(296,93) Error: Incompatible types: got "<address of procedure(LongWord,LongWord,LongWord,LongWord);StdCall>" expected "<procedure variable type of procedure(LongWord,LongWord,LongWord,Pointer);StdCall>"



Kann bitte Jemand helfen :?:

Liebe Grüße
Zuletzt geändert von lazarusjulian am Di 12. Apr 2016, 09:40, insgesamt 1-mal geändert.

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

Re: BASS_ChannelSetSync im fpc-Mode

Beitrag von lazarusjulian »

Habs hinbekommen.

das Problem war, dass ich die Deklaration der LoopSyncProc in meiner eigenen Unit1 nicht angepasst hatte.


alt und falsch:

Code: Alles auswählen

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


neu und richtig :

Code: Alles auswählen

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

Antworten