如何将LockBox 3安装到Delphi 7中?

时间:2014-09-23 16:30:13

标签: delphi lockbox-3

这是我第一次为Lockbox安装库。我从sourceforge下载了3.4.3版本并使用了Delphi 7.第一步是让这个sucker在Delphi 7下编译并且它是地狱。我希望安装后组件更容易使用。

确定。我有一个看起来像这样的单位。

unit uTPLb_StrUtils;

interface

uses
  SysUtils, uTPLb_D7Compatibility;

function AnsiBytesOf(const S: string): TBytes;

implementation

function AnsiBytesOf(const S: string): TBytes;
begin
//compiler chokes here
  **Result := TEncoding.ANSI.GetBytes(S);**
end;

end.
BTW,兼容性单元将TBytes定义为TBytes =打包的字节数组;

Delphi 7在TEncoding上窒息,因为它只存在于D2009 +中。我该怎么用?

替换这个功能

3 个答案:

答案 0 :(得分:4)

String是Delphi 7中的8位AnsiString。只需将TBytes分配给字符串的Length(),将Move()字符串内容分配到其中:

function AnsiBytesOf(const S: AnsiString): TBytes;
begin
  SetLength(Result, Length(S) * SizeOf(AnsiChar));
  Move(PChar(S)^, PByte(Result)^, Length(Result));
end;

如果您希望在政治上正确并与TEncoding.GetBytes()匹配,则必须将String转换为WideString,然后使用Win32 API WideCharToMultiBytes()函数将其转换为字节:

function AnsiBytesOf(const S: WideString): TBytes;
var
  Len: Integer;
begin
  Result := nil;
  if S = '' then Exit;
  Len := WideCharToMultiByte(0, 0, PWideChar(S), Length(S), nil, 0, nil, nil);
  if Len = 0 then RaiseLastOSError;
  SetLength(Result, Len+1);
  WideCharToMultiByte(0, 0, PWideChar(S), Length(S), PAnsiChar(PByte(Result)), Len, nil, nil);
  Result[Len] = $0;
end;

答案 1 :(得分:0)

function Quux(const S: AnsiString): TBytes;
var
  Count: Integer;
begin
  Count := Length(S) * SizeOf(AnsiChar);
  {$IFOPT R+}
  if Count = 0 then Exit; // nothing to do
  {$ENDIF}
  SetLength(Result, Count);
  Move(S[1], Result[Low(Result)], Count);
end;

答案 2 :(得分:0)

你可以在这里获得LB 3.5:

http://lockbox.seanbdurkin.id.au/Grok+TurboPower+LockBox

尝试使用3.5。