IPB
ЛогинПароль:

> ВНИМАНИЕ!

Прежде чем задать вопрос, смотрите FAQ.
Рекомендуем загрузить DRKB.

> Динамическая загрузка Dll, Ошибка при вызове FreeLibrary
hiv
сообщение 2.11.2005 15:29
Сообщение #1


Профи
****

Группа: Пользователи
Сообщений: 660
Пол: Мужской
Реальное имя: Михаил

Репутация: -  11  +


Возникает постоянная ошибка при вызове функции динамической выгрузки DLL - FreeLibrary.
Прикрепленное изображение
И еще интересный факт - при прописывании в 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(c);
    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 читал... все вроде в рамках правил... sad.gif


--------------------
Никогда не жадничай. Свои проблемы с любовью дари людям!
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
 
 Ответить  Открыть новую тему 
Ответов(1 - 1)
hiv
сообщение 7.11.2005 12:09
Сообщение #2


Профи
****

Группа: Пользователи
Сообщений: 660
Пол: Мужской
Реальное имя: Михаил

Репутация: -  11  +


Перешел на Delphi7 build 4.453 - и добавил вновь (раньше тоже добавлял) uses ShareMem в код DLL-ки и вызывающей программы - и все заработало smile.gif

ЗЫ: Нужно прописывать uses ShareMem также и в файл проекта и везде первым!!!

Сообщение отредактировано: hiv - 8.11.2005 12:45


--------------------
Никогда не жадничай. Свои проблемы с любовью дари людям!
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 

 Ответить  Открыть новую тему 
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 

- Текстовая версия 27.07.2025 21:37
Хостинг предоставлен компанией "Веб Сервис Центр" при поддержке компании "ДокЛаб"