在 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 字符串以某种方式损坏。我看不到低音 DLL 实际接收到的内容,但在调试器中使用断点,字符串看起来不错:
var
s : PAnsiChar;
begin
s := PAnsiChar( AnsiString( url ));
此时字符串 s 看起来很好,但是当我通过它时 BASS 函数会失败。我的初始代码:PAnsiChar( url ) 与 BASS 配合得很好,但会发出警告。
那么在没有警告的情况下从 UnicodeString 到 PAnsiChar 的正确方法是什么?