Converting UnicodeString to PAnsiChar in Delphi XE
- by moodforaday
In Delphi XE I am using the BASS audio library, which contains this function:
function BASS_StreamCreateURL(url: PAnsiChar; offset: DWORD; flags: DWORD;
proc: DOWNLOADPROC; user: Pointer):HSTREAM; stdcall; external bassdll;
The 'url' parameter is of type PAnsiChar, so in my code I do a cast:
FStreamHandle := BASS_StreamCreateURL(PAnsiChar( url ) [...]
The compiler emits a warning on this line: "suspicious typecast of string to PAnsiChar". In trying to eliminate the warning, I found that the recommended way is to use a double cast:
FStreamHandle := BASS_StreamCreateURL(PAnsiChar( AnsiString( url )) [...]
This does eliminate the warning, but the BASS function now returns error code 2 ("cannot open file"), which tells me the URL string it receives is somehow broken. I cannot see what the bass DLL actually receives, but using a breakpoint in the debugger the string looks good:
var
s : PAnsiChar;
begin
s := PAnsiChar( AnsiString( url ));
At this point string s appears fine, but the BASS function fails when I pass it. My initial code: PAnsiChar( url ) works well with BASS, but emits a warning.
So what's the correct way of getting from UnicodeString to PAnsiChar without a warning?