Comment eviter une Erreur 48 "Dll introuvable" [Résolu]

Signaler
Messages postés
406
Date d'inscription
lundi 9 juin 2003
Statut
Membre
Dernière intervention
4 septembre 2013
-
Messages postés
17286
Date d'inscription
mercredi 2 janvier 2002
Statut
Modérateur
Dernière intervention
23 décembre 2019
-
Bonjour à tous

Voila, je me suis fabriqué une DLL standard non activeX avec un autre language que VB.

Dans cette derniere, j'ai mis une protection dans l'AttachProcess afin de verifier si le logiciel qui l'appelle est autorisé à le faire.
Donc si la condition n'est pas bonne la DLL refuse de s'ouvrir.

Cela marche bien, seulement VB me retourne un message d'erreur 48 "Fichier non trouvé : MaDll.dll" et je n'arrive pas à l'empecher.
I doit croire, je pense qu'elle n'existe pas, alors que si j'enleve la protection de la DLL, cela fonctionne tres bien, donc ce n'est pas une erreur de chemin.
Si j'appelle la DLL avec un autre language pas d'erreur non plus.

Les "on error", ne fonctionne apparement pas pour les DLL

Auriez vous une solution miracle

Je vous remercie
Bonne journée

10 réponses

Messages postés
17286
Date d'inscription
mercredi 2 janvier 2002
Statut
Modérateur
Dernière intervention
23 décembre 2019
67
passes par APIs...

LoadLibrary (renvoie hLib = 0 si echec)
FreeLibrary
...
Messages postés
17286
Date d'inscription
mercredi 2 janvier 2002
Statut
Modérateur
Dernière intervention
23 décembre 2019
67
DLL_PROCESS_ATTACH
DLL_THREAD_ATTACH

voir:

http://msdn.microsoft.com/en-us/library/ms682583(VS.85).aspx
Messages postés
406
Date d'inscription
lundi 9 juin 2003
Statut
Membre
Dernière intervention
4 septembre 2013
1
RENFIELD tu es géant !!!!!
Et je pese mes mots.

Encore une fois le cavalier solitaire est arrivé et m'a sauvé des sables mouvants avec son splendide lasso

Dix mille merci
Messages postés
7668
Date d'inscription
samedi 5 novembre 2005
Statut
Membre
Dernière intervention
22 août 2014
25
Le plus simple reste sans doute de passer les arguments adéquats (dont celui concernant le programme d'appel des(ou de la) fonction(s) de ta dll et de faire retourner une valeur (par la/les fonction(s) appelées) telle qu'elle serait sans effet dans le progr   mme d'appel non autorisé (pas d'autres valeurs attendues retournées).
C'est donc ta dll qu'il est préférable de modifier, plutôt que le programme l'appelant ...
Messages postés
406
Date d'inscription
lundi 9 juin 2003
Statut
Membre
Dernière intervention
4 septembre 2013
1
Merci de ta reponse jmfmarques.

J'avais utilisé cette methode pour eviter de mettre une condition par function dans la DLL.
Car si il y a 50 fonctions, ça fait 150 lignes supplementaires.

Je trouvais plus judicieux de tester au chargement de la DLL, si elle devait ou non pouvoir etre utilisée, plutot qu'aller dans chacune des fonctions pour faire le test.

En plus cela fait une condition de plus qui sera testée pour rien, lorsque les fonctions vont s'appeller entre elles dans la DLL.

En fait, je passe tous les parametres correctement à la DLL.
Mais dans l'AttacheProcess je vais tester dans un fichier externe, si le nom de l'appli qui l'appelle est bien répertorié dans la liste, si non, je stoppe le chargement de la librairie.

Et VB prend ça comme si elle n'existait pas, ce n'est pas parce que elle ne veux pas se charger, qu'elle n'existe pas ..
C'est quand meme dingue qu'on ne puisse pas gerer les erreurs de librairie ...
Messages postés
7668
Date d'inscription
samedi 5 novembre 2005
Statut
Membre
Dernière intervention
22 août 2014
25
Ajoute alors une fonction (une seule) de contrôle dans ta dll

Il te suffira ensuite d'une seule courte ligne au début de toutes les autres fonction, genre :
if  toto(monprogrammeappelant) = 0 then ...où toto est le nom de la fonction de vérification et retourne 0 si programme non accepté.
Et si 0 ===>> ouste ==>> 0 retourné à l'appelant.
Messages postés
406
Date d'inscription
lundi 9 juin 2003
Statut
Membre
Dernière intervention
4 septembre 2013
1
Oui, cette solution c'etait celle que j'avais adopté avant de decouvrir cette fonction AttachProcess.
Si personne ne trouve mieux, bah je resterais sur celle la.
Je te remercie beaucoup de ton aide.
Messages postés
406
Date d'inscription
lundi 9 juin 2003
Statut
Membre
Dernière intervention
4 septembre 2013
1
Un petit bemol !!!
J'ai l'impression que LoadLibrary fait 2 tentatives pour entrer dans la DLL ??

Car j'ai mis un petit code ASM que l'on m'a donné dans l'AttachProcess de la DLL, qui permet de remettre à ce que j'ai compris le pointeur à l'entrée de la DLL, ça equivaut à un refus d'entrer.

!ADD esp, 8     ; remove Instance variable and return address from stack 
!MOV eax, 0     ; set returnvalue to 0 
!RET 12         ; return from DllEntryPoint

Sait tu si y'a moyen d'empecher ça ????
Est ce bien un double essai ????

Encore merci
Messages postés
406
Date d'inscription
lundi 9 juin 2003
Statut
Membre
Dernière intervention
4 septembre 2013
1
Encore merci grand RENFIELD.
Mon empire pour 10 % de ton savoir ..........

Entretemps, j'ai trouvé l'erreur.
En fait, pour te faciliter la tache, je me suis dit, je vais mettre en lien un ZIP avec dedans ma DLL et le code de trois ligne qui gazouille pas.

Et en creant tout ça, eh ben plus d'erreur
Alors, j'ai continué a chercher et je me suis rendu compte que comme j'avais ecris à deux reprises le code ASM magique pour deux conditions differentes, l'une pour tester si la clef existait dans le repertoire et l'autre pour verifier si le logiciel etait autorisé.
Eh bien, je pense que ma DLL avait du mal a le digérer.
L'ASM c'est tellement puissant qu'il faut respecter les doses

Alors apparement, ce code il faut le mettre qu'une fois et s'arranger pour faire les deux conditions autour d'un seul.

Bon aux dernieres nouvelles tout marche, grace à toi, je m'en suis sorti pour la partie VB.
Je vais quand meme aller jeter un oeil sur les liens que tu m'as donné.
Les DLL c'est vraiment passionnant
Merci à tous

Jamais je ne pourrais assez vous remercier
Je vous souhaite une excelente journée
Messages postés
17286
Date d'inscription
mercredi 2 janvier 2002
Statut
Modérateur
Dernière intervention
23 décembre 2019
67
ravi que tu t'en soit sortit avec les bribes d'infos fournies... j'aime que les gens fouinent et cherchent a comprendre ^^