|
Publicité ' | |||||||||||||||||||||||
|
|
#1 | ||||
|
Invité de passage
![]() |
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 :
"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 :
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? |
||||
|
|
00
|
|
|
#2 |
![]() ![]() vincent rogier Inscription : juillet 2007 Messages : 2 355 ![]() |
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 |
|
00
|
|
|
#3 |
|
Invité de passage
![]() |
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 |
|
|
00
|
Copyright © 2000-2012 - www.developpez.com