Précédent   Forum des professionnels en informatique > Bases de données > Oracle > Interfaces de programmation
Interfaces de programmation Forum d'entraide sur l'utilisation des API Oracle : Pré-compilateurs, OCI, OCCI, etc.
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 24/01/2012, 03h24   #1
Invité de passage
 
Inscription : avril 2006
Messages : 5
Détails du profil
Informations forums :
Inscription : avril 2006
Messages : 5
Points : 2
Points : 2
Envoyer un message via MSN à conon95
Par défaut [OCILIB] Erreur OCI_Initialize : Cannot load OCI shared library (oci.dll)

Bonjour à tous,

Je démarre tout juste avec l'API.
Après quelques maladresses, j'arrive enfin à compiler et exécuter un programme (Merci Vincent...).

Maintenant, j'utilise la toute première instruction OCI_Initialize.

Pour celà, je teste le code suivant sur un poste Windows 7 dans Visual Studio C++, projet MFC avec utilisation des MFC en statique (ça peut éventuellement être important) :
Code :
1
2
3
4
5
6
7
8
9
10
 
int res_oci_ini;
res_oci_ini=OCI_Initialize(NULL, NULL, OCI_ENV_DEFAULT | OCI_ENV_CONTEXT);
IF(res_oci_ini!=TRUE)
{
	OCI_Error *err = OCI_GetLastError();
	CString logecran;
	logecran.Format("Erreur Oracle : OCI_Initialize. errcode=%d errmsg=%s", OCI_ErrorGetOCICode(err),  OCI_ErrorGetString(err));
	MessageBox(logecran);
}
Et si je poste ce message, c'est que j'obtiens à l'écran l'erreur :
"Erreur Oracle : OCI_Initialize. errcode=0 errmsg=Cannot load OCI shared library (oci.dll)"

Je me dis que le programme ne trouve peut-être pas la DLL de mon Oracle.
J'ai installé Oracle 11g (client+serveur) dans le répertoire :
D:\ORACLE

J'ai regardé la définition de OCI_Initialize.
Et d'après ce que j'ai lu, le deuxième argument, optionnel, peut être un path où aller chercher :
* Soit on ne précise pas le path et Windows 'sait' où aller chercher
* Soit on ne précise pas le path, et si Windows ne sait pas où chercher, ce sera dans son PATH
* Soit on précise un path où aller chercher

J'ai donc testé plusieurs choses :
* de copier les fichiers oci*.dll de mon BIN Oracle dans C:\WINDOWS (c'est là où j'ai d'ailleurs copié ociliba.dll)
* d'appeler la fonction OCI_Initialize avec l'un des deux paramétrages suivants, successivement :
Code :
1
2
3
 
resociini=OCI_Initialize(NULL, "D:\\Oracle\\product\\11.2.0\\dbhome_1\\BIN", OCI_ENV_DEFAULT | OCI_ENV_CONTEXT);
resociini=OCI_Initialize(NULL, "D:\\Oracle", OCI_ENV_DEFAULT | OCI_ENV_CONTEXT);
J'ai toujours exactement le même message d'erreur.
Quelqu'un voit-il ce qui peut se passer et proposer quelque chose ?

Question subsidiaire qui est peut être naïve : le message d'erreur indique que 'oci.dll' ne peut se charger. S'il s'agit bien de oci.dll de mon client Oracle, comment le programme sait-il son nom alors qu'il n'arrive pas à la charger?
conon95 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 24/01/2012, 14h03   #2
Rédacteur/Modérateur
 
Avatar de Vincent Rogier
 
vincent rogier
Inscription : juillet 2007
Messages : 2 355
Détails du profil
Informations personnelles :
Nom : vincent rogier
Âge : 34

Informations forums :
Inscription : juillet 2007
Messages : 2 355
Points : 3 108
Points : 3 108
Le nom de la DLL a charger est déterminé à la compilation en étant déduit de la plateforme (ou peut être fourni sous Unices par le configure).

Si OCILIB ne peut charger sous la librairie partagée (sous windows, "oci.dll"), deux raison possible :

- La dll n'existe pas aux endroit ou elle peut être chargé (path fourni à OCI_Initialize() ou paths systemes)
- L'application utilisant OCILIB est en 32bits et le client Oracle en 64bits ou vice versa...
__________________
Vincent Rogier.

Rubrique ORACLE : Accueil - Forum - Tutoriels - FAQ - Livres - Blog

Vous voulez contribuer à la rubrique Oracle ? Contactez la rubrique !

OCILIB (C Driver for Oracle)

Librairie C Open Source multi-plateformes pour accéder et manipuler des bases de données Oracle
Vincent Rogier est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 24/01/2012, 20h03   #3
Invité de passage
 
Inscription : avril 2006
Messages : 5
Détails du profil
Informations forums :
Inscription : avril 2006
Messages : 5
Points : 2
Points : 2
Envoyer un message via MSN à conon95
Salut Vincent,
Je me doutais vaguement que cette fois encore, il pourrait s'agir d'une histoire de 32/64 bits.
Déjà la première fois, tu m'as mis sur la bonne voie : bien que mon système soit en 64 bits, tu m'as appris que Visual Studio génère par défaut du 32 bits (ce qui m'a permis de mettre les bons fichier oci de ton API).
Et en effet, j'ai installé la version x64 de Oracle 11g.
Je suis donc actuellement en 32bits pour le programme et 64 pour Oracle.

J'ai donc le choix entre :
* Générer du code 64 bits (+mettre les bons fichiers de l'API)
* Installer un Oracle 32 bits.

Quelques minutes m'ont suffit pour générer une version 64 bits de mon projet Visual C++.
Tu avais une fois de plus vu juste : mon projet compile et la fonction OCI_Initialize passe sans erreur.
La suite devrait être un jeu d'enfant je pense.

C'est la solution que je préfère : le programme c'est moi qui le maîtrise alors que le client Oracle, je n'aurai pas toujours le choix.

Encore un sujet qui sera marqué "résolu" en deux temps trois mouvements.
Je ne peux encore une fois que te remercier chaudement.
Philippe
conon95 est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 20h21.


 
 
 
 
Partenaires

Hébergement Web