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 : Sélectionner tout - Visualiser dans une fenêtre à part
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 : Sélectionner tout - Visualiser dans une fenêtre à part
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?