Bonjour,
Je développe actuellement sous VC++ 6, une DLL permettant l'accès à une base de données SQL Server. Je rencontre actuellement des problèmes.
La situation :
Toutes nos applications fonctionnent actuellement sous une base Btrieve. Le but est de migrer sous SQL Server 2005 Express, tout en gardant un fonctionnement séquentiel, comme en Btrieve, pour éviter d'avoir à modifier en profondeur toutes nos applications.
J'ai pris le partie d'utiliser OLE DB, qui me permet d'avoir des curseurs sur un jeux d'enregistrements (donc fonctionnement similaire à Btrieve).
Cette DLL, est utilisée en statique par 2 autres DLL, elles même utilisées en statique dans un exe.
Il y a donc 2 connections sur ma base de données, par l'intermédiaire de ma DLL.
Le problème :
A la fermeture de mon application, lors de l'exit instance, et lors des connexions à la base de données et notamment à la fermeture de la Session, j'ai le message suivant :
=> « First-chance exception in Appli.exe (MSDART.DLL): 0xC0000005: Access Violation »
Voici ma pile d'appel au moment du plantage :
MSDART! 768e8f09()
MSDART! 768e9a13()
OLEDB32! 73ef33eb()
OLEDB32! 73ed00c6()
OLEDB32! 73ed7cd4()
OLEDB32! 73ed802e()
OLEDB32! 73ed8017()
OLEDB32! 73ec1d0e()
OLEDB32! 73ec2d1f()
ATL::CComPtr<IOpenRowset>::Release() line 453 + 14 bytes
ATL::CSession::Close() line 3420
CMyDataBaseAccess::CloseSession() line 93
Au début, je me suis orienté sur un problème dans l'initialisation ou la « désinitialisation » de l'OLE DB. Je fais pourtant un CoInitializeEx avant d'utiliser Ole db, puis CoUnitializeEx une fois que je m'en sers plus.
Au final, et après plusieurs heures de recherche, je ne sais pas si cela vient d'un problème de l'Ole Db, ou alors dans la façon d'appeler mes DLL....
Merci d'avance pour votre aide.
Gaël