![]() |
AW: Rückgabe-Pointer PUTF8String aus DLL in String umwandeln?
Zitat:
Eine SDL2.dll habe ich in meiner Steam-Installation gefunden und verwendet. Anhand deines Quelltext-Schnipsels und den sehr anschaulichen Konsolenprogramm von Friedhelm kam ich auf das:
Delphi-Quellcode:
Das ergibt dann in der Stringliste auf meinen Windows 10 System:
uses
System.SysUtils, System.Classes; const SDL_INIT_AUDIO = $00000010; DEVICE_TYPE_OUTPUT = 0; SDL_LIB = 'SDL2.dll'; function SDL_Init(flags: Integer): Integer; cdecl; external SDL_LIB; function SDL_GetNumAudioDevices(isCapture: Integer): Integer; cdecl; external SDL_LIB; function SDL_GetAudioDeviceName(index: Integer; isCapture: Integer): PAnsiChar; cdecl; external SDL_LIB; procedure TestGetAudioDeviceName; var pDeviceName: PAnsiChar; deviceName: string; deviceNameList: TStringList; count, i: Integer; begin SDL_Init(SDL_INIT_AUDIO); count := SDL_GetNumAudioDevices(0); deviceNameList := TStringList.Create(); try for i := 0 to count - 1 do begin pDeviceName := SDL_GetAudioDeviceName(i, 0); deviceName := UTF8ToString(pDeviceName); deviceNameList.Add(deviceName); end; finally deviceNameList.Free; end; end; Zitat:
Das hat bei mir in Delphi Rio schon gar nicht kompiliert wegen:
Code:
[dcc32 Error] SDLDemo.dpr(34): E2251 Ambiguous overloaded call to 'UTF8ToString'
System.pas(39750): Related method: function UTF8ToString(const array of AnsiChar): string; System.pas(39740): Related method: function UTF8ToString(const ShortString): string; Zitat:
Man beachte die Dateiendung. |
AW: Rückgabe-Pointer PUTF8String aus DLL in String umwandeln?
Zitat:
Mein Fehler war hier, dass ich versucht habe, über deren sdl.pas-Implementierung das Problem zu lösen. Eine so wie in deinem Beispiel extrem abgespeckte Implementierung ist zielführender, ich brauche in meinem Fall sogar nicht zu initialisieren, dies passiert ja im FlashAVConverter schon und dann kann ich die korrekten Variablentypen nutzen. Daher vielen Dank für das Beispiel, damit kommen bei mir jetzt auch valide Werte raus. Das Problem mit MacOS war, dass das SDL2.pas-Beispiel nicht MacOS-64-fähig war, d.h. da waren teilweise Integer-Werte nicht miteinander kompatibel. Das ist in dem hier abgespeckten Beispiel jetzt aber natürlich auch kein Problem. Das Beispiel von Friedhelm hatte ich bei meinem Kommentar von 17:25 noch gar nicht gesehen, mein Fehler. Meine Info bezog sich noch auf den vorletzten Kommentar. Vielen Dank allen für die Hilfe. Jetzt wird der nächste Spaß noch die Kollegen von FlashAVConverter zu überzeugen, dass man auch während eine Datei abgespielt wird, man den Output-Kanal wechseln möchte. Das scheint dort noch nicht so ganz zu gehen. Aber das wird auch noch. |
AW: Rückgabe-Pointer PUTF8String aus DLL in String umwandeln?
Bei Allem außer Windows gibt es leider keinen AnsiString mehr (nicht direkt), was eine geräteübergreifende Lösung auf neuere Wege führt. (die ganzen Stream-Funktionen um TEncoding und Co.)
PS: Delphi nimmt bei PAnsiChar natürlich ANSI als Standardkodierung an, was man bei direkter Übergabe von PAnsiChar an AnsiString/String beachten sollte. UTF8String SetString + SetCodePage wenn der String ein AnsiString, aber kein UTF8String ist SetAnsiString inkl. SetCodePage LStrFromPCharLen TEncoding.GetString ... |
Alle Zeitangaben in WEZ +1. Es ist jetzt 07:26 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz