Нажмите для просмотра прикрепленного файла
И еще интересный факт - при прописывании в uses модуля ShareMem, при выходе из программы тоже ругается... (правда не так) Может у меня несовместимость Delphi6 и Windows XP SP1?
Вот код DLL-ки:
library mvts218;
uses
SysUtils,
Classes,
JclStrings;
{$R *.res}
function Identificator:shortstring;
begin
Result:='MERA VoIP Transit Softswitch';
end;
procedure GetNames(var RNames :AnsiString);
var Names:TStrings;
begin
Names := TStringList.Create;
try
Names.Add('DATE');
Names.Add('HOST');
Names.Add('SRC-NUMBER-IN');
Names.Add('DST-NUMBER-IN');
Names.Add('SRC-NUMBER-OUT');
Names.Add('DST-NUMBER-OUT');
Names.Add('SRC-NUMBER-BILL');
Names.Add('DST-NUMBER-BILL');
Names.Add('SRC-IP');
Names.Add('DST-IP');
Names.Add('SRC-USER');
Names.Add('DST-USER');
Names.Add('ELAPSED-TIME');
Names.Add('SETUP-TIME');
Names.Add('CONNECT-TIME');
Names.Add('DISCONNECT-TIME');
Names.Add('DISCONNECT-CODE-LOCAL');
Names.Add('DISCONNECT-CODE-Q931');
Names.Add('SRC-BYTES-IN');
Names.Add('DST-BYTES-IN');
Names.Add('SRC-BYTES-OUT');
Names.Add('DST-BYTES-OUT');
Names.Add('QOS');
Names.Add('SRC-CODEC');
Names.Add('DST-CODEC');
Names.Add('CALLID');
Names.Add('CONFID');
Names.Add('LAR-FAULT-REASON');
Names.Add('PROXY-MODE');
Names.Add('ROUTE-RETRIES');
RNames:=Names.Text;
finally
Names.Free;
end;
end;
function ConvertMeraDate(sd:shortstring):shortstring;
var s,d,m,y,t :string;
i :integer;
begin
s:=Trim(sd);
i:=pos(' ',s);
m:=copy(s,1,i-1);
delete(s,1,i);
if m='Jan' then m:='01'
else if m='Feb' then m:='02'
else if m='Mar' then m:='03'
else if m='Apr' then m:='04'
else if m='May' then m:='05'
else if m='Jun' then m:='06'
else if m='Jul' then m:='07'
else if m='Aug' then m:='08'
else if m='Sep' then m:='09'
else if m='Oct' then m:='10'
else if m='Nov' then m:='11'
else if m='Dec' then m:='12'
else m:='00';
i:=pos(' ',s);
d:=copy(s,1,i-1);
delete(s,1,i);
i:=pos(' ',s);
t:=copy(s,1,i-1);
delete(s,1,i);
y:=s;
Result:=y+'-'+m+'-'+d+' '+t;
end;
function GetRecord(p:pointer; var Data :AnsiString):pointer;
var s :string;
c,ce,pe,cr :PChar;
Buff,value :string;
i,jd,ju :integer;
D :TstringList;
begin
Result:=nil;
if p=nil then exit;
c:=p;
pe:=StrEnd(p); // конец буфера
Result:=pe;
D := TStringList.Create;
try
// ищем начало записи
while (c[0] in [#0, #10, #13]) and (c<pe) do inc©;
if c>=pe then exit;
// ищем коней записи
ce:=c;
while not(ce[0] in [#0, #10, #13]) and (ce<pe) do inc(ce);
cr:=ce;
// ищем начало следующей
while (cr[0] in [#0, #10, #13]) and (cr<pe) do inc(cr);
Result:=cr;
// Buff - содержит одну запись
SetString(Buff,c,ce-c);
// чтение даты
jd:=pos(' ',Buff)+1;
ju:=pos(',',Buff);
value:=copy(Buff,jd,ju-jd);
s:=ConvertMeraDate(value); // конвертация формата даты
SetString(Buff,c+ju,ce-c-ju); // то же, только без даты в начале
// разбиваем на строки остальные данные
StrToStrings(Buff,',',D,false);
D.Add('DATE='+s); // добавляем дату
for i:=0 to D.Count-1 do
D.Strings[i]:=UPPERCASE(trim(D.Strings[i]));
Data:=D.Text; // выдача результата
finally
D.Free;
end;
end;
exports Identificator, GetNames, GetRecord;
begin
end.
DRKB читал... все вроде в рамках правил...
