Преобразуйте строку в PAnsiChar в Delphi 2009

Я не вижу никаких проблем в вашем коде из указанных проблем. Но что может помочь вам узнать, что ваша анимация что-то делает, так это проверить два выхода angular-animation предоставляет вам: Start и Done ( AnimationEvents ). Вы получите событие, которое содержит информацию о ваших новых штатах. Если вы получите что-то, то вам, возможно, придется детально проверить анимацию или CSS.

animationDone(event) {
  console.log(event)
}

animationStarted(event) {
  console.log(event)
}

21
задан Toon Krijthe 12 November 2008 в 12:20
поделиться

6 ответов

У меня нет Дельфи 2009 здесь, таким образом, я не могу проверить его. Но возможно необходимо попробовать:

s := PAnsiChar(AnsiString(Application.ExeName));

Как gabr уже указал, это не очень хорошая практика, и Вы будете только использовать ее, если Вы будете на 100% уверены. Строка только содержит символы, которые имеют прямое отображение на диапазон ANSI.

Вот почему необходимо получить предупреждение, потому что Вы преобразовываете Unicode в ANSI.

32
ответ дан 29 November 2019 в 20:55
поделиться

Gamecat явные работы преобразования. Я объясняю проблему более подробно ниже так, чтобы, возможно, кто-то мог указать на лучшее решение.

я использую следующую функцию для получения даты компиляции приложения:

function LinkerTimeStamp(const FileName: string): TDateTime;
var
  LI: TLoadedImage;
begin
  {$IFDEF UNICODE}
  Win32Check(MapAndLoad(PAnsiChar(AnsiString(FileName)), nil, @LI, False, True));
  {$ELSE}
  Win32Check(MapAndLoad(PChar(FileName), nil, @LI, False, True));
  {$ENDIF}
  Result := LI.FileHeader.FileHeader.TimeDateStamp / SecsPerDay + UnixDateDelta;
  UnMapAndLoad(@LI);
end;

MapAndLoad требует PAnsiChar для Параметра ImageName, таким образом, я должен преобразовать строку unicode. Действительно ли там кто-либо другой альтернативен для явного преобразования в AnsiString сначала?

1
ответ дан 29 November 2019 в 20:55
поделиться

У меня была та же самая проблема. PAnsiChar только точки к первому символу. Я записал следующую функцию для обработки старой функциональности.

// This function converts a string to a PAnsiChar
// If the output is not the same, an exception is raised
// Author: nogabel@hotmail.com

function StringToPAnsiChar(stringVar : string) : PAnsiChar;
Var
  AnsString : AnsiString;
  InternalError : Boolean;
begin
  InternalError := false;
  Result := '';
  try
    if stringVar <> '' Then
    begin
       AnsString := AnsiString(StringVar);
       Result := PAnsiChar(PAnsiString(AnsString));
    end;
  Except
    InternalError := true;
  end;
  if InternalError or (String(Result) <> stringVar) then
  begin
    Raise Exception.Create('Conversion from string to PAnsiChar failed!');
  end;
end;
0
ответ дан 29 November 2019 в 20:55
поделиться

WideCharToMultiByte мог помочь Вам.

0
ответ дан 29 November 2019 в 20:55
поделиться

Я думаю, что Вы немного не в себе. Каждая функция Win32 API имеет аналог Unicode, если она ожидает строку. Попробуйте MapAndLoadW вместо MapAndLoad ...

-1
ответ дан 29 November 2019 в 20:55
поделиться

Вместо использования типа String используйте RawByteString :

s: RawByteString;

s := LoadSomeRegularString(usually a string type);

PAnsiChar(s) <<< all fine.
4
ответ дан 29 November 2019 в 20:55
поделиться
Другие вопросы по тегам:

Похожие вопросы: