Utilisation de la fonction LoadLibrary == Visual C++

Utilisation de la fonction LoadLibrary == Visual C++ - C++ - Programmation

Marsh Posté le 08-01-2003 à 07:32:58    

Bonjour à tous, et merci d'avance pour vos réponses et conseils éclairés.
 
Je fabrique actuellement des DLL qui contiennent, non pas des objets ou des classes, mais simplement des fonctions exportables vers d'autres DLL ou applicatifs.
Je précise que je n'utilise absolument pas de MFC.
 
Exemple, soit une fonction "float somme(float &a, float &b)".
Je crée une DLL nommée somme, à l'intérieur de laquelle on trouve la fonction exportée somme.
(l'exportdes fonctions se fait par le biais d'un fichier .def  de cette façon, j'exporte des fonctions au format C, et non au format C++, (pas de @@@@@@ lors de l'aperçu rapide des fonctions exportées sosu Windows).
 
Le programme appelant ces différentes fonctions utilise un chargement dynamique des DLL (LoadLibrary, puis GetProcAddress).
 
Les chargements se déroulent correctement, si ce n'est que lorsque le nombre de fonctions à charger en mémoire devient important (36), la dernière fonction ne se charge plus).
 
Le code d'erreur retourné par LoadLibrary est 1114, ce qui correspond à :
"A dynamic link library (DLL) initialization routine failed. ".
 
J'ai recherché dans l'aide MSDNet à DLL initialization, et on trouve un txte expliquant la nécessité de créer pour chaque DLL d'extension une fonction d'initialisation qui doit être appelée par le programme appelant. Cependant, ce paragraphe ne semble se référer qu'aux structures utilisant des MFC. Que faut-il faire ?  
Est-il obligatoire d'utiliser des fonctions d'initialisation, et le cas échéant, quel est leur rôle ? fonction ?  
Quel document, écrit en français, permettrait d'y voir plus clair ?

Reply

Marsh Posté le 08-01-2003 à 07:32:58   

Reply

Marsh Posté le 08-01-2003 à 07:43:49    

jibolin77 a écrit :


Le programme appelant ces différentes fonctions utilise un chargement dynamique des DLL (LoadLibrary, puis GetProcAddress).
 
Les chargements se déroulent correctement, si ce n'est que lorsque le nombre de fonctions à charger en mémoire devient important (36), la dernière fonction ne se charge plus).
 
Le code d'erreur retourné par LoadLibrary est 1114, ce qui correspond à :
"A dynamic link library (DLL) initialization routine failed. ".
 
J'ai recherché dans l'aide MSDNet à DLL initialization, et on trouve un txte expliquant la nécessité de créer pour chaque DLL d'extension une fonction d'initialisation qui doit être appelée par le programme appelant. Cependant, ce paragraphe ne semble se référer qu'aux structures utilisant des MFC. Que faut-il faire ?  
Est-il obligatoire d'utiliser des fonctions d'initialisation, et le cas échéant, quel est leur rôle ? fonction ?  
Quel document, écrit en français, permettrait d'y voir plus clair ?
 


 
 
Je pense qu'ils doivent parler de leur fonction 'DllMain', mais celle-ci est appelée automatiquement si elle est instrumentée ( comme les fonctions _init et _fini sous unix ). Aucun besoin d'une autre fonction d'init que je sache...
 
En lisant ton poste, j'ai l'impression que pour chaque fonction, tu fais un LoadLibrary+GetProcAddress. C'est bien cela?

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed