在Delphi XE中,我正在使用BASS音频库,其中包含此函数:
“url”参数的类型是PAnsiChar,因此在我的代码中我进行了转换:
编译器在这一行发出了警告:“可疑的将字符串转换为PAnsiChar类型”。在尝试消除警告时,我发现推荐的方法是使用双重转换:
这样做可以消除警告,但是BASS函数现在返回错误代码2(“无法打开文件”),这告诉我它接收到的URL字符串有些问题。我看不到bass DLL实际接收到什么,但是使用调试器中的断点,字符串看起来很好:
在这一点上,字符串s看起来很好,但是当我传递它时,BASS函数失败了。我的初始代码:PAnsiChar(url)与BASS配合良好,但会发出警告。
那么,从UnicodeString到PAnsiChar的正确方法是什么,而不会有警告呢?
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的正确方法是什么,而不会有警告呢?