В Delphi XE я использую BASS audio library, который содержит эту функцию:Преобразование UnicodeString в PAnsiChar в Delphi XE
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». В попытке устранить предупреждение, я found that рекомендуемый способом является использование двойного броска:
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 без предупреждения?
Я только что использовал AnsiString AnsiString: myURL; myURL: = 'http: // ...' BASS_StreamCreateURL (PAnsiChar (myURL), 0, [...] и работал над Delphi XE2 – vhanla