为了获得语言环境设置,例如短日期格式,我们总是使用GetLocaleFormatSettings和GetThreadLocale.到目前为止,这一直没有问题.
我们的几个用户获得的GetThreadLocale值与Windows 7中的区域设置中的配置值不同.无论我们尝试什么,我都无法重现这一点,但我向一位用户发送了测试用于获取区域设置信息的程序,并且足够确定GetThreadLocale返回与GetUserDefaultLCID(2057)不同的LCID(1033).因此,它们不是获取英国语言环境设置,而是最终使用美国语言环境设置.
我们是否错误地获取了区域设置信息?我们应该使用GetUserDefaultLCID而不是GetThreadLocale吗?
谢谢
在Delphi 2007中,您可以在WideString中存储UTF-8字符串,然后将其传递给Win32函数,例如
var
UnicodeStr: WideString;
UTF8Str: WideString;
begin
UnicodeStr:='some unicode text';
UTF8Str:=UTF8Encode(UnicodeStr);
Windows.SomeFunction(PWideChar(UTF8Str), ...)
end;
Run Code Online (Sandbox Code Playgroud)
Delphi 2007不会干扰UTF8Str的内容,即它保留为存储在WideString中的UTF-8编码字符串.
但是在Delphi 2010中,我很难找到一种方法来做同样的事情,即将一个UTF-8编码的字符串存储在WideString中,而不会自动从UTF-8转换.我无法传递指向UTF-8字符串(或RawByteString)的指针,例如以下显然不起作用:
var
UnicodeStr: WideString;
UTF8Str: UTF8String;
begin
UnicodeStr:='some unicode text';
UTF8Str:=UTF8Encode(UnicodeStr);
Windows.SomeFunction(PWideChar(UTF8Str), ...)
end;
Run Code Online (Sandbox Code Playgroud) 我们目前正在将Delphi 2007项目转换为Delphi 2010.我们已经在使用Unicode(通过WideStrings和TNT Unicode控件).
我期望将所有Wide函数(例如WideUpperCase)替换为等效的,例如UpperCase,但它们的工作方式不同.例如,WideUpperCase与UpperCase的工作方式不同.WideUpperCase正确地改变了Campañas,但是UpperCase以小写形式留下了ñ.
我应该注意哪些其他差异?例如,WideFormat和Format的工作原理是一样的吗?
谢谢
使用以下Delphi XE2(更新4)代码:
var
ConInfo: TAmazonConnectionInfo;
RespInfo: TCloudResponseInfo;
Service: TAmazonStorageService;
Content: TBytes;
Headers: TStringList;
begin
ConInfo:=TAmazonConnectionInfo.Create(self);
ConInfo.AccountName:='YOUR ACCOUNT NAME';
ConInfo.AccountKey:='YOUR ACCOUNT KEY';
ConInfo.Protocol:='http';
Service:=TAmazonStorageService.Create(ConInfo);
RespInfo:=TCloudResponseInfo.Create;
SetLength(Content, 128);
FillMemory(@Content[0], 128, Byte('x'));
Headers:=TStringList.Create;
Headers.Values['Content-type']:='text/plain';
if not Service.UploadObject('YOUR BUCKET', 'test.txt', Content, TRUE, nil, Headers, amzbaPrivate, RespInfo) then
ShowMessage('Failed:' + RespInfo.StatusMessage);
Run Code Online (Sandbox Code Playgroud)
我总是在调用UploadObject时遇到错误:
失败:HTTP/1.1 403禁止 - 我们计算的请求签名与您提供的签名不匹配.检查您的密钥和签名方法.(SignatureDoesNotMatch)
仅当Content-type设置为'text/plain','text/html'或文本内容时才会发生这种情况.使用完全相同的代码,如果您只是将内容类型更改为任何其他内容类型,例如"video/3gpp",那么它将按预期工作且没有错误.上传的对象的实际内容不相关,与获取错误无关.
我已经通过Delphi中的Indy代码进行了跟踪,但是我很难理解为什么文本内容类型总是会出现这个错误.
有任何想法吗?
除了/ n软件中的Amazon Integrator,是否还有其他可与Delphi 2010一起使用的Amazon S3组件?我将使用/ n软件中的那个,但是它存在一些问题(例如,如果对象存储在特定位置,则GetObjectInfo不起作用)和限制(例如,复制对象不允许您定义替换元数据)。
我没有时间或资源自己创建这样的组件。
谢谢!
我们正在使用一些旧代码(由Binh Ly创建的ComLib.pas),因此我们可以在(OleVariant)对象上使用枚举接口:
type
TDispNewEnum = dispinterface
['{97079E31-6957-11D2-9154-0000B4552A26}'] // dummy
property _NewEnum: IUnknown readonly dispid -4; // DISPID_NEWENUM
function _NewEnumFunc: IUnknown; dispid -4; // DISPID_NEWENUM
end;
procedure TEnumVariant.AttachUnknown (const Unk: IUnknown);
var
pDisp: IDispatch;
_NewEnumPropFailed: boolean;
Unknown: IUnknown;
begin
Detach;
Unknown := Unk;
{ extract IEnumVariant }
if (Unknown <> nil) then
begin
{ try IEnumVariant }
if not (Succeeded (Unknown.QueryInterface (IEnumVariant, FEnumVariant))) then
begin
FEnumVariant := nil; // safety!
{ test _NewEnum prop and _NewEnum func }
if (Succeeded (Unknown.QueryInterface …Run Code Online (Sandbox Code Playgroud) 我有一个TStringList,它被排序并包含唯一的文件名.该列表可以是任何大小(因此它可以是数十万个条目).我想检查是否有任何条目以特定字符串开头(即文件是否在子文件夹中).串行扫描列表并使用StartsText很容易,但这不是一个理想的解决方案.
使用TStringList.Find()代码作为起点,我创建了一个我认为是解决方案的函数,但我想确定.不要担心以下不是类的成员(FList是被搜索的TStringList实例),StartsFilename的工作方式与StartsText相同:
function ShortcutFind(const S: string): Boolean;
var
L, H, I, C: Integer;
begin
Result := False;
L := 0;
H := FList.Count - 1;
while L <= H do begin
I := (L + H) shr 1;
if TFilenameUtils.StartsFilename(FList[I], aFolder) then begin
Result:=TRUE;
Exit;
end;
C := FList.CompareStrings(FList[I], S);
if C < 0 then
L := I + 1
else begin
H := I - 1;
if C = 0 then begin
Result := True;
if FList.Duplicates <> dupAccept …Run Code Online (Sandbox Code Playgroud) delphi ×7
amazon-s3 ×2
delphi-2010 ×2
unicode ×2
components ×1
content-type ×1
delphi-2007 ×1
delphi-xe2 ×1
idispatch ×1
indy ×1
iunknown ×1
string ×1
tstringlist ×1
utf-16 ×1
utf-8 ×1
widestring ×1
windows-7 ×1