Hi,
ich kämpfe gerade an den Details meiner FFMPEG-Anbindung, weil diese vom Hersteller der Bibliothek noch nicht vollständig implementiert ist.
Es geht gerade darum, den Namen des Ausgabe-Device zu ermitteln.
Hierfür ist zwar schon eine Methode in der sdl.dll vorgesehen, diese liefert aber nur einen Pointer auf einen UTF8String zurück:
Delphi-Quellcode:
function SDL_GetAudioDeviceName(index:Integer;iscapture:Integer):PUTF8String;
cdecl;external libsdl;
SDL_GetAudioDeviceName:function(index:Integer;iscapture:Integer):PUTF8String;
cdecl;
Habe ich hier von außen überhaupt die Chance den String hinter dem Pointer zu erhalten?
Hier sieht man, dass ich an sich richtig eine PUTF8String in einen String zurückwandeln kann ('Help me'),
aber mit dem Pointer aus dem
DLL-Aufruf kann ich dies nicht tun, da gibt es dann eine EAccessViolation.
Delphi-Quellcode:
function TAVPlayer.getAudioDeviceName(index:integer):String;
var deviceName:PUTF8String;
str1:String;
str2:UTF8String;
begin
str1:='Help me';
str2:=UTF8Encode(str1);
deviceName:=@Pointer(str2);
result:=UTF8ToString(deviceName^);
deviceName:=SDL_GetAudioDeviceName(index,0);
//EAccessViolation:
result:=UTF8ToString(deviceName^);
end;
Grüße, Philipp