tôi đang cố gắng gọi EnumSystemLocales
ở Delphi. For example:Làm thế nào để gọi EnumSystemLocales trong Delphi?
{ Called for each supported locale. }
function LocalesCallback(Name: PChar): BOOL; stdcall;
begin
OutputDebugString(Name);
Result := Bool(1); //True
end;
procedure TForm1.Button1Click(Sender: TObject);
begin
EnumSystemLocales(@LocalesCallback, LCID_SUPPORTED);
end;
Vấn đề là gọi lại chỉ được gọi một lần.
Lưu ý:EnumSystemLocales
là trả về true, cho biết thành công.
Các nhận xét của EnumSystemLocales
nói rằng callback tôi phải trả lại đúng để tiếp tục liệt kê (hay đúng hơn, không phải trả lại sai để tiếp tục liệt kê):
Chức năng liệt kê miền địa phương bằng cách định danh locale , một tại một lần, với hàm gọi lại do ứng dụng xác định. Điều này tiếp tục cho đến khi tất cả các mã định danh đã được cài đặt hoặc hỗ trợ đã được chuyển đến hàm gọi lại hoặc hàm gọi lại trả về FALSE.
Trên documentation of the callback function:
BOOL CALLBACK EnumLocalesProc(
__in LPTSTR lpLocaleString
);
một commenter đã đi qua một vấn đề với định nghĩa của "không sai":
chức năng này phải trả về 1, không (DWORD) - 1 để tiếp tục xử lý
Điều này khiến tôi nghĩ định nghĩa của delphi là
True: BOOL;
khác với của Window. (Đó là lý do tại sao tôi đã thử một giá trị trả về của BOOL(1)
- mà vẫn không thành công).
Tiếp theo, tôi tự hỏi nếu nó thậm chí không được coi là stdcall
.
Dù bằng cách nào, ai đó có thể đề xuất cách thức, trong Delpi, gọi EnumSystemLocales
?
Sửa: Cũng thử:
Result := BOOL(-1);
Result := BOOL($FFFFFFFF);
Result := BOOL(1);
Result := True;
Vấn đề dường như được tập trung vào cách thức để viết các hàm callback thay vì gọi EnumSystemLocales. Tôi có đúng không? – menjaraz
Phiên bản Windows? – OnTheFly
@menjaraz Nó rất tốt có thể được - nhưng tôi không muốn giảm giá bất kỳ possiblity. –