Consultor Eletrônico



Kbase P51576: The ClavisAddress DLL from the company AND is causing a GPF
Autor   Progress Software Corporation - Progress
Acesso   Público
Publicação   11/3/2003
Status: Unverified

GOAL:

Progress 9.1D

GOAL:

Windows

SYMPTOM(s):

The ClavisAddress DLL from the company AND is causing a GPF when invoking the ClavQNew procedure.

CAUSE:

The clavisaddress_2.dll external procedures are not defined with the PERSISTENT option. This causes the DLL to be unloaded as soon as the procedure is finished. In this case ClavQNew is initialized by ClavisInit, which initially loads the DLL.

FIX:

The clavisaddress_2.dll external procedures need to be defined with the PERSISTENT option. The DLL needs to stay loaded for the entire session. Please take a look at the following sample code:


/**************************************/
&GLOBAL-DEFINE CLAVISADDRESS LONG
&GLOBAL-DEFINE CLAVAQUERY LONG
&GLOBAL-DEFINE PLONG LONG
&GLOBAL-DEFINE PCHARACTER CHARACTER
&GLOBAL-DEFINE CLAVIS_DLL E:\clavis\lib\clavisaddress_2.dll

DEFINE VARIABLE DataPaths AS CHARACTER.
DEFINE VARIABLE FileMasks AS CHARACTER.
DEFINE VARIABLE LogfileName AS CHARACTER.
DEFINE VARIABLE Service AS CHARACTER.
DEFINE VARIABLE ErrorCode AS INTEGER.
DEFINE VARIABLE Clava AS INTEGER.
DEFINE VARIABLE ClavQ AS INTEGER.

ASSIGN
DataPaths = "E:\clavis\data"
FileMasks = "world.and;pcnl.and"
LogfileName = "E:\clavis\log\clavis.log"
Service = "file".

/* 1 keer bij het opstarten */
RUN ClavisInit (INPUT DataPaths, INPUT FileMasks, INPUT LogfileName,
INPUT Service, OUTPUT ErrorCode, OUTPUT Clava).

MESSAGE "ErrorCode:" ErrorCode "Clava:" Clava
VIEW-AS ALERT-BOX INFO BUTTONS OK.

RUN ClavQNew (INPUT Clava, OUTPUT ErrorCode, OUTPUT ClavQ).

MESSAGE "ErrorCode:" ErrorCode "ClavQ:" ClavQ
VIEW-AS ALERT-BOX INFO BUTTONS OK.

RUN ClavisExit (INPUT Clava).
MESSAGE "Exit"
VIEW-AS ALERT-BOX INFO BUTTONS OK.

RELEASE EXTERNAL "{&CLAVIS_Dll}".


PROCEDURE ClavisInit EXTERNAL "{&CLAVIS_Dll}" PERSISTENT:
DEFINE INPUT PARAMETER szDataPaths AS {&PCHARACTER} NO-UNDO.
DEFINE INPUT PARAMETER szFileMasks AS {&PCHARACTER} NO-UNDO.
DEFINE INPUT PARAMETER szLogfileName AS {&PCHARACTER} NO-UNDO.
DEFINE INPUT PARAMETER szService AS {&PCHARACTER} NO-UNDO.
DEFINE OUTPUT PARAMETER pnErrorCode AS {&PLONG} NO-UNDO.
DEFINE RETURN PARAMETER hnClava AS {&CLAVISADDRESS} NO-UNDO.
END PROCEDURE.

PROCEDURE ClavQNew EXTERNAL "{&CLAVIS_Dll}" PERSISTENT:
DEFINE INPUT PARAMETER hnClava AS {&CLAVISADDRESS} NO-UNDO.
DEFINE OUTPUT PARAMETER pnErrorCode AS {&PLONG} NO-UNDO.
DEFINE RETURN PARAMETER hnClavQ AS {&CLAVAQUERY} NO-UNDO.
END PROCEDURE.

PROCEDURE ClavisExit EXTERNAL "{&CLAVIS_Dll}" PERSISTENT:
DEFINE INPUT PARAMETER hnClava AS {&CLAVISADDRESS} NO-UNDO.
END PROCEDURE.
/**************************************/