有個VC撰寫的DLL函式,一旦呼叫后,Delphi內部的now時間就不改變了, 比如呼叫前:S= FormatDatetime('yyyy/mm/dd hh:nn:ss',Now) 能正常顯示當前時間, 呼叫DLL后 , S永遠取值都不變的。 但是,奇怪的是,使用windows內部的API函式GetLocalTime(SysTime) 函式可以獲取到變動的日期時間 ,比如:
Edit1.Text:= IntToStr(SysTime.wYear)
+'/'+IntToStr(SysTime.wMonth)
+'/'+IntToStr(SysTime.wDay)
+' '+IntToStr(SysTime.wHour)
+':'+IntToStr(SysTime.wMinute)
+':'+IntToStr(SysTime.wSecond);
能正常顯示 ,但是只要用到delphi中的SysUtils單元中函式 都無法改變的,比如EncodeDate、DateTimeToStr等等,函式中的值都不變的。 這個同學碰到這樣的情況沒有的 ,難度DLL中的函式有鎖定功能????
uj5u.com熱心網友回復:
這是你呼叫API,干擾了Delphi的New函式。這樣,你可以直接使用系統的API函式,調取時間值。
GetLocalTime(&sysT) ; // 獲取本地時區對應的時間
GetSystemTime(&sysT) ; // 獲取系統時間(標準格林時間)
uj5u.com熱心網友回復:
學習了,充電中uj5u.com熱心網友回復:
那現在已經知道GetLocalTime(SysTime)可以正確獲取時間 ,但是無法轉換成Tdatetime型別,其中SysUtils單元中與時間相關函式都無法使用的
uj5u.com熱心網友回復:
unit Unit2;
interface
uses
Winapi.Windows, System.SysUtils, System.Classes,
Vcl.Controls, Vcl.Forms, Vcl.Dialogs;
type
TForm2 = class(TForm)
procedure FormCreate(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form2: TForm2;
implementation
{$R *.dfm}
procedure TForm2.FormCreate(Sender: TObject);
var
p : SYSTEMTIME;
begin
GetLocalTime(p);
ShowMessage(DateTimeToStr(SystemTimeToDateTime(p)));
end;
end.
uj5u.com熱心網友回復:
時間停止,不可能吧,now函式的第一句還不是GetLocalTime。要么沒有重繪顯示時間,要么自定義了now函式。
uj5u.com熱心網友回復:
應該沒有這回事,用S := FormatDateTime('c', Now);試試。轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/67820.html
標籤:VCL組件開發及應用
