Einzelnen Beitrag anzeigen

philipp.hofmann

Registriert seit: 21. Mär 2012
Ort: Hannover
859 Beiträge
 
Delphi 10.4 Sydney
 
#1

Rückgabe-Pointer PUTF8String aus DLL in String umwandeln?

  Alt 16. Jan 2020, 12:20
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
  Mit Zitat antworten Zitat