با سلام و خسته نباشید خدمت همه اساتید .
من DLLی نوشتم که می خوام کار خاصی رو انجام بده که کدش رو در ادامه پیوست می کنم ، با توجه به تجربه بسیار کمی که در نوشتن DLL دارم . ممنون میشم دوستان با توجه به نیازهایی که از این DLL دارم در بهینه کردن کد کمکم کنند . پیشاپیش از لطفتون سپاسگذارم .

کد :

library amDll;
uses
SysUtils,
Classes,
KDTele_TLB,
Messages,
Windows,
Forms,
UnitKDCommon,
UnitKDPhone;
var
amPhone : TKDPhone;
line_State : TLineState;
lineList : array [1..5] of string;
startTime, endTime : string;
// get collection of line
procedure getLine();
var
lNum : Word;
lName : WideString;
i : Integer;
begin
i := 0;
amPhone := TKDPhone.Create(amPhone);
for lNum := 0 to amPhone.NumberOfLines do
begin
i := i + 1;
amPhone.GetLineName(lNum, lName);
if lName <> '' then
begin
lineList[i] := lName;
end;
end;
end;
// list line for developer
procedure _lineList(var lineListing : string);
var
i : Integer;
begin
for i := 1 to 5 do
begin
lineListing := lineList[i];
end;
end;
// get State of Activate Line
procedure lineState(var _lineState : string);
begin
case line_State of
lsActivated : begin
_lineState := 'خط فعال مي باشد';
end;
lsDeactivated : begin
_lineState := 'خط فعال نيست';
end;
lsError : begin
_lineState := 'خطا در فعال سازي خط';
end;
else
end;
end;
// get Line ID and active Selected Line
procedure lineActive(lineID : Integer; var lineActiveErrorTitle : string);
var
lineActiveError : Integer;
begin
amPhone := TKDPhone.Create(amPhone);
lineActiveError := amPhone.LineActive(lineID, True);
if (lineActiveError <> 0) then
begin
lineActiveErrorTitle := amPhone.GetErrorMsg(lineActiveError);
if lineActiveErrorTitle = 'The telephony device is not compatible with the value specified by the MediaMode property' then
begin
lineActiveErrorTitle := 'مودم انتخاب شده براي برقراري تماس سازگار نيست';
end
else if lineActiveErrorTitle = 'Could not setup the line device' then
begin
lineActiveErrorTitle := 'قادر به فعال سازي اين مودم نيست'
end;
end;
end;
//procedure for dial Number
procedure dialNumber(number : string);
begin
amPhone := TKDPhone.Create(amPhone);
amPhone.DialNumber(number, 0);
startTime := FormatDateTime('hh:mm:ss', Time);
end;
// procedure for hangUp Call
procedure hangUpCall();
begin
amPhone := TKDPhone.Create(amPhone);
amPhone.Hangup;
endTime := FormatDateTime('hh:mm:ss', Time);
end;
// procedure for calculate call Time
procedure callProccess(var totalTime : string);
var
shTime, smTime, ssTime, ehTime, emTime, esTime : string;
hh, mm, ss : Integer;
begin
// start Time
shTime := Copy(startTime, 1, 2);
smTime := Copy(startTime, 4, 2);
ssTime := Copy(startTime, 7, 2);
// end Time
ehTime := Copy(endTime, 1, 2);
emTime := Copy(endTime, 4, 2);
esTime := Copy(endTime, 7, 2);
// calculate Time
hh := StrToInt(ehTime) - StrToInt(shTime);
mm := StrToInt(emTime) - StrToInt(smTime);
ss := StrToInt(esTime) - StrToInt(ssTime);
// return and show Time
totalTime := IntToStr(hh) + ':' + IntToStr(mm) + ':' + IntToStr(ss);
end;
// export important procedure
exports
callProccess, hangUpCall, dialNumber, lineActive, lineState, _lineList;
{$R *.res}
begin
end.


نیازها :

اینجا چند تا Procedure نوشتم که بعضی ها باید مقداری رو برگردونند که با توجه به جستجویی که کردم Procedure مقداری رو بر نمی گردونه و باید از function استفاده کنم . حالا می خوام که هر جایی از این کد که باید تبدیل به function یا Procedure بشه با کمک شما انجام بشه .

ممنون میشم در این زمینه کمکم کنید .