🚀 go-pugleaf

RetroBBS NetNews Server

Inspired by RockSolid Light RIP Retro Guy

Article View: pl.comp.lang.delphi.bazy-danych
Article #556

Problem z UDF na InterBase

#556
From: Tomasz Kustra
Date: Wed, 12 May 1999 13:43
61 lines
2750 bytes
Napisałem w Delphi małego Dll'a z jedną funkcją, którą następnie
rejstruję jako EXTERNAL FUNCTION w bazie na InterBase.
Funkcja działa bez zarzutu w przypadku gdy wywołują ją po otwarciu bazy
danych i jeszcze kilka razy(....).
Po pewnym czasie wywala błąd i jedynym sposobem na dalszą pracę jest
zakończenie pracy z bazą i ponowne rozpoczęcie.
Cżęstotliwość występowania błędu jest stała tzn.:
- dla deklaracji:
  DECLARE EXTERNAL FUNCTION ELGETNEXTSGN
   CSTRING(80), CSTRING(80), INTEGER
   RETURNS CSTRING(80) FREE_IT
  ENTRY_POINT "ElUGetNextSgn"  MODULE_NAME "eludf.dll"
 błąd generowany jest przez serwer co 216 wywołań funkcji
- dla deklaracji:
DECLARE EXTERNAL FUNCTION ELGETNEXTSGN
   CSTRING(256), CSTRING(256), INTEGER
   RETURNS CSTRING(256) -1
  ENTRY_POINT "ElUGetNextSgn"  MODULE_NAME "eludf.dll"
 błąd generowany co 213 wywołąń funkcji.

Sam kod funkcji ELGetNextSgn jest bardzo prosty:

function ElUGetNextSgn(OldSgn,SgnConst:PChar;var SgnLen:
integer):PChar;cdecl;export;
.......
function ElUGetNextSgn(OldSgn,SgnConst:PChar;var SgnLen: integer):PChar;
var
  NewN,j: integer;
  NewS: string;
begin
  j:=Length(string(SgnConst));
  if Length(string(OldSgn))=0 then
    NewN:=1
  else NewN:=StrToIntDef(Copy(string(OldSgn),j+1,SgnLen),0)+1;
  NewS:=IntToStr(NewN);
  j:=SgnLen-j;
  while Length(NewS)<j do NewS:='0'+NewS;
  NewS:=string(SgnConst)+NewS;
  Result:=MakeOutStr(NewS);
end;

Funkcja MakeOutStr:

function MakeOutStr(Value: string):PChar;
var
 j: integer;
begin
  j:=Length(Value)+1;
  Mem
  Result:=AllocMem(j);
  Move(PChar(Value)^,Result^,j);
end;

Czy ktoś spotkał się z podobnym problemem a jeżeli tak to czy można z niego
wybrnąć?
ps.
Poza tym zadziwiająca jest rególarnoiść występowania błędu (test
przeprowadzany kilkadziesiąt razy).

Tomasz Kustra
tom_kust@friko5.onet.pl
Technical Details
Message-ID: <Zzf_2.12276$I1.235188@news.tpnet.pl>
Path: mbox-mo1.pugleaf.net!news-archive.icm.edu.pl!pingwin.icm.edu.pl!mat.uni.torun.pl!uw.edu.pl!lublin.pl!news.onet.pl!orion.cst.tpsa.pl!news.tpnet.pl!not-for-mail

Show Full Headers
Complete Article Headers
Path: mbox-mo1.pugleaf.net!news-archive.icm.edu.pl!pingwin.icm.edu.pl!mat.uni.torun.pl!uw.edu.pl!lublin.pl!news.onet.pl!orion.cst.tpsa.pl!news.tpnet.pl!not-for-mail
From: "Tomasz Kustra" <tom_kust@friko5.onet.pl>
Newsgroups: pl.comp.lang.delphi.bazy-danych
Subject: Problem z UDF na InterBase
Lines: 65
X-Priority: 3
X-MSMail-Priority: Normal
X-Newsreader: Microsoft Outlook Express 5.00.2014.211
X-MimeOLE: Produced By Microsoft MimeOLE V5.00.2014.211
Message-ID: <Zzf_2.12276$I1.235188@news.tpnet.pl>
Date: Wed, 12 May 1999 15:43:17 +0200
NNTP-Posting-Host: 212.160.34.99
X-Complaints-To: abuse@tpsa.pl
X-Trace: news.tpnet.pl 926516601 212.160.34.99 (Wed, 12 May 1999 15:43:21 MET DST)
NNTP-Posting-Date: Wed, 12 May 1999 15:43:21 MET DST
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit