So einfach kann ich kein Beispiel-Projekt generieren, weil ich...blablabla
Komisch, dass hat mich jetzt nur 10 Minuten gekostet.
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:
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;
Das ergibt dann in der Stringliste auf meinen Windows 10 System:
Zitat:
Kopfhörer (2- Microsoft LifeChat LX-3000)
PL2495W (NVIDIA High Definition Audio)
Realtek Digital Output (Realtek High Definition Audio)
Bringe mal deine Variablentypen in Ordnung (PAnsiChar/PUTF8String anstatt PChar, verwende den Index der Schleife für SDL_GetAudioDeviceName anstatt immer 0 reinzugeben und lasse auf jedem Fall das dereferenzieren des Rückgabewertes. Also das hier pDeviceName^ -> Nicht machen!
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:
Nur läuft...nicht unter MacOS-64
Verwendest du denn auch die SDL2.dylib für Mac
OS X anstatt den Windows-Build mit SDL2.dll?
Man beachte die Dateiendung.