LoadLibrary avec C++ Builder 6 sous Windows 2000
Bonjour,
Vous pouvez peut-etre m'aider ...
Je viens d'ecrire une application professionelle avec BCB 6 Entreprise.
Application en VCL compilée en mode static (pas de RunTime) avec conservation des gestionnaires d'exception...
Si je fais un LoadLibrary d'une DLL pour laquelle il manque une ressource DLL statique, j'ai un message d'erreur remonté par le gestionnaire d'exception de l'application (impossible de charger xxxxx.dll, introuvable dans le path: .............) uniquement sous Windows 2000 (pas sous 95, 98, non teste sous NT4 et XP).
J'aimerais ne pas voir s'afficher cette erreur.
Ayant développé des applications sous Borland C++ 5.02, Microsoft Visual C++ 5.0 et 6.0, Microsoft Visual Basic 4.0 qui font le meme type de chargement dynamique, je n'ai pas ce message d'erreur sous Windows 2000.
J'ai essayé une solution du style:
MyApplication (BCB6) linker avec MyResource.Dll (BC++5.02) qui fait un LoadLibrary -> resultat identique sous Windows 2000.
Que se passe-t-il ? Pourquoi ? Comment passer outre ?
Il existe une fonction exportée et automatiquement créée lors de la compilation de l'application en VCL qui est __GetExceptDLLInfo ....
Est-ce elle qui gere ce type de message ?
Merci pour votre aide et votre réponse.
Cordialement Thomas
LoadLibrary C++ Builder 6
Le but est d'avoir un handler de ressources DLL et de charger uniquement celles qui sont chargeables. Il y en a une vingtaine mais seulement certaines seront utilisees par l'application. Mon probleme est de ne pas voir le message systeme "DLL introuvable ... avec path ..." a l'ecran. Cette application tournant en flux tendu dans une usine de production, il est hors de question d'avoir un message bloquant l'application et donc de bloquer les productions en cours.
LoadLibrary avec C++ Builder 6 sous Windows 2000
Pour etre plus claire (si j'y arrive), je voudrais utiliser le LoadLibrary de l'api 32 QUI PLANTE AVEC retour NULL (pour info, il peut y avoir des valeurs d'erreur de retour inferieure a 32) mais sans voir apparaitre a l'ecran le message systeme (DLL Introuvable .... path ....) sous Windows 2000 et XP.
Ce message ne s'affiche pas sous Windows 95, 98, Me et NT4.
LoadLibrary avec C++ Builder 6 sous Windows 2000
Alors, je ne sais pas ....
MessageBox( "Begin" )
h = LoadLibrary(sMyResource)
MessageBox( "End " + h )
1. Begin s'affiche
2. La fameuse boîte système (DLL Introuvable ... path ...) s'affiche
3. End NULL s'affiche
Où dois-je donc mettre le try ... catch ... et quelle exception ... ?
Existerait-il un option (style base de registre) à activer pour supprimer cette boîte système ?
Pour Info, sur Windows 2000 et XP les fonctions LoadLibraryA et LoadLibraryExA sont redirigées de Kernel32 vers NTDLL.DLL (les nouvelles fonctions sont prefixées par Ldr...., c'est passionant !!!)
Je pense que mon probleme vient de la façon dont est exécuté le l'application (le processus principal) voir comment elle a été compilée.
En effet avec Visual Basic 4 (32 bits) je n'ai pas ce message systeme.
Avec Borland C++ 5.02 et Borland C++ Builder 6, je l'ai ....