Delphi XE では、この関数を含むBASS オーディオ ライブラリを使用しています。
function BASS_StreamCreateURL(url: PAnsiChar; offset: DWORD; flags: DWORD;
proc: DOWNLOADPROC; user: Pointer):HSTREAM; stdcall; external bassdll;
'url' パラメーターは PAnsiChar 型なので、私のコードでは次のようにキャストします。
FStreamHandle := BASS_StreamCreateURL(PAnsiChar( url ) [...]
コンパイラは、次の行に警告を発します: 「PAnsiChar への文字列のタイプキャストが疑わしい」。警告を排除しようとして、推奨される方法は二重キャストを使用することであることがわかりました。
FStreamHandle := BASS_StreamCreateURL(PAnsiChar( AnsiString( url )) [...]
これにより警告はなくなりますが、BASS 関数はエラー コード 2 (「ファイルを開けません」) を返すようになりました。これは、受け取った URL 文字列が壊れていることを示しています。Bass DLL が実際に何を受け取るかはわかりませんが、デバッガーでブレークポイントを使用すると、文字列は問題ないように見えます。
var
s : PAnsiChar;
begin
s := PAnsiChar( AnsiString( url ));
この時点で文字列 s は問題ないように見えますが、渡すと BASS 関数が失敗します。私の最初のコード: PAnsiChar( url ) は BASS でうまく動作しますが、警告を出します。
では、警告なしで UnicodeString から PAnsiChar に取得する正しい方法は何ですか?