Bonjour à tous,
Ca fait maintenant plus d'une semaine que je me casse les dents sur un problème d'importation de DLL. La DLL en question est fournie par une société tierce avec toute la documentation nécessaire pour l'utiliser.
Maintenant, je commence juste à développer avec Visual C++ 2005 Express et je me replonge après plusieurs années de VB dans le langage C++ et j'avoue que j'ai un peu de mal. Mais grâce à developpez.com et ses sources d'informations on s'en sort.
Jusque là ça va ...
Après plusieurs tentatives infructueuses d'importation de la DLL dans une application "Windows Forms", j'ai fait des essais avec un projet "Console Win32" et la DLL fonctionne correctement. Mais uniquement avec l'option "sans prise en charge du CLR". Dès que je sélectionne l'option "avec prise en charge du CLR (/clr)" dans les propriétés du projet et en gardant le même code. La DLL n'est plus accessible et lors de l'execution j'ai des violatons d'accès mémoire.
Et moi je voudrais bien l'importer dans une application "Windows Forms" ! Donc forcément avec l'option "avec prise en charge du CLR (/clr)". Et que ce soit en dynamique ou en statique, rien à faire, à l'execution je n'arrive pas à charger la DLL.
Voici un exemple de code d'importation que j'ai essayé dans le projet "Windows Forms" :
Et pour l'appel des fonctions :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4 [DllImport("D:\\usr\\fox\\system32\\iccapi.dll", EntryPoint = "ICCopen")] __declspec(dllimport) int ICCopen(char *, int, char *); [DllImport("D:\\usr\\fox\\system32\\iccapi.dll", EntryPoint = "ICCclose")] __declspec(dllimport) int ICCclose();
A la compilation tout ce passe bien. Mais à l'execution, lors de l'appel des fonctions, voici ce que j'obtiens dans le fichier de sortie :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 ICCopen("FLY010",5,"01234567890123456789"); ICCclose();
Et là ça ne va plus du tout !'ESSAI_ICCAPI.exe'*: Chargé 'D:\usr\fox\system32\iccapi.dll', Le fichier binaire n'a pas été généré avec les informations de débogage.
'ESSAI_ICCAPI.exe'*: Chargé 'D:\usr\fox\system32\csaretrv.dll', Le fichier binaire n'a pas été généré avec les informations de débogage.
'ESSAI_ICCAPI.exe'*: Chargé 'D:\usr\fox\system32\largem.dll', Le fichier binaire n'a pas été généré avec les informations de débogage.
'ESSAI_ICCAPI.exe'*: Chargé 'D:\usr\fox\system32\xhi.dll', Le fichier binaire n'a pas été généré avec les informations de débogage.
'ESSAI_ICCAPI.exe'*: Chargé 'D:\usr\fox\system32\fox.dll', Le fichier binaire n'a pas été généré avec les informations de débogage.
'ESSAI_ICCAPI.exe'*: Chargé 'D:\usr\fox\system32\foxfdr.dll', Le fichier binaire n'a pas été généré avec les informations de débogage.
LDR: LdrRelocateImageWithBias() failed 0xc0000018
LDR: OldBase : 00A00000
LDR: NewBase : 03BE0000
LDR: Diff : 0x7c91dec20012c8bc
LDR: NextOffset : 00000000
LDR: *NextOffset : 0x0
LDR: SizeOfBlock : 0x3be0000
'ESSAI_ICCAPI.exe'*: Déchargé 'D:\usr\fox\system32\iccapi.dll'
'ESSAI_ICCAPI.exe'*: Déchargé 'D:\usr\fox\system32\csaretrv.dll'
'ESSAI_ICCAPI.exe'*: Déchargé 'D:\usr\fox\system32\largem.dll'
'ESSAI_ICCAPI.exe'*: Déchargé 'D:\usr\fox\system32\xhi.dll'
'ESSAI_ICCAPI.exe'*: Déchargé 'D:\usr\fox\system32\fox.dll'
'ESSAI_ICCAPI.exe'*: Déchargé 'D:\usr\fox\system32\foxfdr.dll'
Une exception non gérée du type 'System.DllNotFoundException' s'est produite dans ESSAI_ICCAPI.exe
Informations supplémentaires*: Impossible de charger la DLL 'D:\usr\fox\system32\iccapi.dll': Tentative d'accès à une adresse non valide. (Exception de HRESULT : 0x800701E7)
Malgré toutes mes recherches je ne trouve pas d'où vient le problème.
J'ai donc plusieurs questions :
1) Pourquoi dans mon projet "Console Win32" le résultat de la compilation est différent entre les deux options de compilation "sans prise en charge du CLR" et "avec prise en charge du CLR (/clr)" alors que cette dernière est censée prendre en charge les deux types de code, managé et non managé ?
2) A quoi correspondent "LDR" et la fonction "LdrRelocateImageWithBias()" qui me posent apparemment problème ?
3) Est-ce qu'une âme fort charitable ou un "gourou du CLR" pourrait me venir en aide et m'indiquer des pistes à suivre pour arriver à importer cette DLL dans une application "Windows Forms" ?
Merci à tous ceux qui ont prit le temps de me lire, et merci d'avance à ceux qui pouront m'apporter de l'aide !
Partager