程式在讀取某個大檔案時,因為時間比較長,要做一個進度條來顯示讀取進度,讀取程式寫在Dll里,請問題如何把當前的進度值實時的傳給主程式。主程式根據值資料顯示進度。
謝謝大家,只有這么多分了。
uj5u.com熱心網友回復:
主程式在呼叫dll中的函式時候把句柄傳入,然后使用自定義訊息進行通知主程式,當然也可以倒過來,主程式不停的(比如Timer)訪問dll,獲取進度,然后更新界面。uj5u.com熱心網友回復:
dll 弄個回呼uj5u.com熱心網友回復:
dll里做一個回呼,傳回讀取到的位置uj5u.com熱心網友回復:
真不好意思,不太懂回呼,不知能不能給點代碼。比如 Dll里做一個回圈
procedure test(x,y:uint64);
begin
while x<y do
begin
inc(x);
end;
end;
怎么在主程式中顯示進度條,
謝謝大家了
uj5u.com熱心網友回復:
procedure test(x,y:uint64;prb1:TProgressBar);stdcall;begin
prb1.max:=y;
while x<y do
begin
inc(x);
prb1.Position:=prb1.Position+1;
end;
prb1.Position:=0;
end;
在主程式中放一個TProgressBar,呼叫此函式時傳進去就可以了。
uj5u.com熱心網友回復:
to:wuhs這個Dll要用C#呼叫,這樣寫在C#中可以呼叫嗎?
uj5u.com熱心網友回復:
估計只能Delphi呼叫吧uj5u.com熱心網友回復:
要用C#呼叫,為何不在C#里寫Dll呢uj5u.com熱心網友回復:
因為我只會Delphi,客戶那里要用C#調uj5u.com熱心網友回復:
PostMessage 給主程式uj5u.com熱心網友回復:
TypeTNotifyProgress=procedure (Current; Total); stdcall;
var
FNotifyProgress:TNotifyProgress;
procedure test(x,y:uint64;prb1:TProgressBar);stdcall;
begin
prb1.max:=y;
while x<y do
begin
inc(x);
prb1.Position:=prb1.Position+1;
FNotifyProgress(prb1.Position,Total);
end;
prb1.Position:=0;
end;
procedure SetNotifyProgress(proc: TNotifyProgress);stdcall; //把這個函式匯出
begin
FNotifyProgress:= proc;
end;
uj5u.com熱心網友回復:
就如樓上的,使用回呼函式,簡潔、安全、直觀。TGovBase=Class(TInterfacedObject,IGovBase)
private
protected
adc:TADOConnection;
rst,rstTmp:TADOQuery;
FCBF:TCBF;
AppPath:string;
function GetConnection:TADOConnection;
procedure SetConnection(Value:TADOConnection);
function getCBF : TCBF;
procedure setCBF(Value:TCBF);virtual;
procedure FreeAndNilRst(r:TADOQuery);
public
constructor Create(_Connection:TADOConnection);Virtual;
destructor Destroy;Virtual;
//指定資料鏈接,在其它程序呼叫前,需先指定鏈接
property Connection:TADOConnection read GetConnection write SetConnection;
//指定進度顯示的回呼函式
property PrsBackCall:TCBF read getCBF write setCBF;
////共公函式
function FmtDate(FDate:String):string; //格式化日期將 199901 轉換為 1999-01-01
function FmtDatePrint(FDate:String):string; //格式化日期,將199901、1999-01-01轉換成為1999.01,主要是輸出表中使用
function GetAge(sDate:String):string;
end;
這是將通過介面呼叫DLL中物件的定義,也是使用的回呼函式傳遞資料回主程式。
uj5u.com熱心網友回復:
設定列印不同的頁面時,分別使用不同的列印機。轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/76076.html
標籤:語言基礎/算法/系統設計
下一篇:求教sql如何建設索引
