Bonjour,

Config : Oracle 9i, Windows 2000.

J'ai créé une dll C (lib1.dll) qui elle-même utilise une dll (lib2.dll). Ces 2 dll sont dans un répertoire C:\Lib
J'ai créé une libraire :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
CREATE OR REPLACE LIBRARY MA_LIB AS 'C:\Lib\lib1.dll'
J'ai créé ma procédure externe :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
  FUNCTION LibEntryPoint(id IN PLS_INTEGER) RETURN PLS_INTEGER
  AS LANGUAGE C
	 NAME "libEntryPoint"
	 LIBRARY "MA_LIB"
	 WITH CONTEXT
	 PARAMETERS(CONTEXT, id INT);
Mais qu'en j'essai d'exécuter :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
DECLARE 
	err NUMBER;
BEGIN 
	err := LibEntryPoint(1);
END;
J'obtiens l'erreur suivante :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
ORA-06520: PL/SQL: Error loading external library
ORA-06522: Unable to load DLL
Le listener.ora est configuré:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
LISTENER =
  (DESCRIPTION_LIST =
    (DESCRIPTION =
      (ADDRESS_LIST =
        (ADDRESS = (PROTOCOL = TCP)(HOST = nufas4)(PORT = 1521))
      )
      (ADDRESS_LIST =
        (ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC0))
      )
    )
  )
 
SID_LIST_LISTENER =
  (SID_LIST =
    (SID_DESC =
      (ENVS="EXTPROC_DLLS=ANY")
      (SID_NAME = PLSExtProc)
      (ORACLE_HOME = C:\Programs\ora92)
      (PROGRAM = extproc)
    )
  )
et le tnsname.ora contient :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
EXTPROC_CONNECTION_DATA=
  (DESCRIPTION =
    (ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC0))
    (CONNECT_DATA = (SID = PLSExtProc))
  )
J'ai également essayé d'ajouter le répertoire où se trouvent les 2 dll dans la variable d'environnement "path" mais ça ne change rien.
Par contre, si je modifie la dll "lib1" pour qu'elle n'utilise plus la dll "lib2" ça fonctionne...

Quelqu'un peut-il m'aider ?
Merci