Pas d'inquiétude, avec PBAdonf, c'est dans la poche ! ^^

Le forum (ô combien francophone) des utilisateurs de Powerbuilder.

Recherche rapide

Annonce

Certaines rubriques, dont des cours, sont uniquement visibles par les membres du forum ^^.
Dans la rubrique Liens & Références, vous avez accès à un sommaire de téléchargement, profitez-en !
Il existe maintenant un nouveau TOPIC "Votre CV en Ligne" accessible uniquement par demande.

#1 02-10-2007 14:41:37

Curios  
Membre Geek
Date d'inscription: 27-04-2007
Messages: 24
Pépites: 149
Banque: 0

[RESOLU] Problème avec la dll crypt32

Bonjour à tous,


J'ai un petit soucis avec une fonction me permettant de crypter un mot de passe en base 64.

Sur mon poste cela fonctionne (windows xp) et aussi sur le serveur par contre sur un serveur avec windows 2003 cela ne fonctionne pas j'ai un message d'erreur :

Powerbuilder Application Execution Error (R0015)
Error calling external function CryptBinaryToStringA at line 14 in function to_stringtobase64 of object n_crypt64.

Mon objet n_crypt64 fait appel à la dll crypt32.dll.
LIBRARY "crypt32.dll" ALIAS FOR "CryptBinaryToStringA"


Une différence entre mon environnement de test et le serveur est la date de la dll celle du serveur date de 2004 et la mienne de 2006. Ce qui me fait penser que le problème viendrait de la dll.

Comment puis-je faire pour que ce soit la dll présente dans le répertoire de mon application qui soit prise en compte au lieu de la dll présente dans system32 (que j'ai essayé de remplacer mais qui se trouve déjà utilisé je ne peux donc pas la remplacer et je ne peux pas redémarrer le serveur en mode sans échec pour faire cette modification.)

Je voudrais donc savoir si vous pensez que c'est bien la dll qui pose problème (ou si ça viendrait d'autre chose) et comment faire pour résoudre mon soucis.


Merci d'avance .


Caractèristiques:
OS server windows 2003
powerbuilder 9
Base de données oracle

Dernière modification par Curios (03-10-2007 15:42:35)

Hors ligne

 

#2 02-10-2007 14:49:45

erasorz  
Admin
Lieu: Babylone
Date d'inscription: 23-11-2006
Messages: 5121
Pépites: 97,197
Banque: 2,147,483,647

Re: [RESOLU] Problème avec la dll crypt32

Curios a écrit:

Comment puis-je faire pour que ce soit la dll présente dans le répertoire de mon application qui soit prise en compte au lieu de la dll présente dans system32

Bonjour, une solution est de déclarer ta fonction sans le chemin et de faire un LoadLibraryA avec le chemin complet (puis un FreeLibrary)


N'envoyez jamais un humain faire le travail d'un programme.

Hors ligne

 

#3 02-10-2007 15:24:13

Curios  
Membre Geek
Date d'inscription: 27-04-2007
Messages: 24
Pépites: 149
Banque: 0

Re: [RESOLU] Problème avec la dll crypt32

Merci pour la rapidité de ta réponse.
Mais je suis désolé je débute au niveau de powerbuilder et je n'ai pas compris la réponse.

Ce que j'ai trouvé au niveau du forum c'est cette information mais j'ai du mal à voir comment PB arrive à s'y retrouver?

FUNCTION ulong FreeLibrary(ulong hLibModule) LIBRARY "kernel32.dll"
et
FUNCTION ulong LoadLibrary(ref string lpLibFileName) LIBRARY
      "kernel32.dll" ALIAS FOR "LoadLibraryA".

Hors ligne

 

#4 02-10-2007 15:42:58

erasorz  
Admin
Lieu: Babylone
Date d'inscription: 23-11-2006
Messages: 5121
Pépites: 97,197
Banque: 2,147,483,647

Re: [RESOLU] Problème avec la dll crypt32

oui déclare ces deux fonctions externes, ensuite avec un LoadLibrary tu pourras spécifier le chemin de ta DLL

Code: pb

// chargement de la DLL
lul_lib = LoadLibrary( "c:\le chemin de la DLL\crypt32.dll" )

// appel de la fonction CryptBinaryToStringA( )
// ...

// déchargement de la DLL
FreeLibrary( lul_lib )

N'envoyez jamais un humain faire le travail d'un programme.

Hors ligne

 

#5 03-10-2007 08:14:48

inferni  
Membre Geek
Lieu: Orléans
Date d'inscription: 28-02-2007
Messages: 52
Pépites: 49
Banque: 2,337,704,263,781

Re: [RESOLU] Problème avec la dll crypt32

essaie de mettre ta librairie crypt32.dll avec ton exe, il devrait la trouver en premier et ne pas aller chercher celle présente dans le répertoire system32

Hors ligne

 

#6 03-10-2007 12:28:30

Curios  
Membre Geek
Date d'inscription: 27-04-2007
Messages: 24
Pépites: 149
Banque: 0

Re: [RESOLU] Problème avec la dll crypt32

Bonjour,

j'ai mis ces deux fonctions en local Extenal Functions comme ci-dessous:

Code: pb

FUNCTION ulong LoadLibrary(ref string lpLibFileName) LIBRARY  &
      "kernel32.dll" ALIAS FOR "LoadLibraryA"
    
FUNCTION ulong FreeLibrary(ulong hLibModule) LIBRARY "kernel32.dll"


Puis dans mon code dans une fonction nomme stringToBase64 j'ai mis le code:

Code: pb

// the value to be encoded, needs to be 3 char or more (but not 4?)
value = blob(as_motacrypter)  


lul_len = Len(value)
lul_buflen = lul_len * 2
ls_encoded = Space(lul_buflen)
ls_pathdll =  gs_tpu_directory + "\crypt32.dll"

// chargement de la DLL
lul_lib = LoadLibrary(ls_pathdll)

// appel de la fonction CryptBinaryToStringA( )
lb_rtn = CryptBinaryToStringA(value, &
                lul_len, CRYPT_STRING_BASE64, &
                ls_encoded, lul_buflen)
           
// déchargement de la DLL
FreeLibrary( lul_lib )


Mais j'ai une message d'erreur de compilation comme quoi ma fonction CryptBinaryToStringA n'est pas reconnue.
Moi même je ne comprends pas comment powerbuilder peut savoir que ma fonction se trouve dans la dll crypt32 si je ne lui dis pas.


Sinon pour répondre à inferni:
j'ai utilisé ta méthode aussi mais ça ne fonctionne pas et j'ai même essayer de reproduire l'erreur chez moi mais impossible.


Je suis par conséquent toujours au même point.
Je relance une compilation de toutes mes bibliothèques mais je ne penses pas que ça va résoudre quoi que ce soit.

Merci.

Dernière modification par Curios (03-10-2007 12:29:26)

Hors ligne

 

#7 03-10-2007 12:33:56

rincevent  
Modérateur
Award: bf
Lieu: Belgique
Date d'inscription: 06-02-2007
Messages: 722
Pépites: 100,002,023
Banque: 0

Re: [RESOLU] Problème avec la dll crypt32

Salut,

à mon avis il faut que tu déclare aussi la fonction CryptBinaryToStringA en external fonction, du genre

Code: pb

FUNCTION ulong CryptBinaryToStringA(ulong hLibModule) LIBRARY "crypt32.dll"

en adaptant les paramètres bien sûr


p.s. quand tu mets du code PB dans un message tu peux l'entourer des balises " [ code = pb ] " et " [ /code ]" (sans les espaces)  pour que la syntaxe soit colorée (plus lisible)

Dernière modification par rincevent (03-10-2007 12:35:44)


http://img114.imageshack.us/img114/8519/userbar175801nb.gif
Pourquoi ne puis-je vivre comme n'importe quel être humain ? Pourquoi mon destin est-il de ne pouvoir cesser de me battre ?

Hors ligne

 

#8 03-10-2007 13:19:49

Curios  
Membre Geek
Date d'inscription: 27-04-2007
Messages: 24
Pépites: 149
Banque: 0

Re: [RESOLU] Problème avec la dll crypt32

Merci rincevent et les autres,


maintenant j'arrive à compiler mais j'ai toujours la même erreur lorsque je lance l'application sur le serveur.

Je vais essayer de trouver un autre moyen. Je vais voir si l'algorythme n'est pas trop compliqué ou sinon je vais passer par une fonction de la base de données oracle (j'aurais peut être plus de chance).

PS: Je saurais pour mes prochains messages, la balise que je devrais mettre.

Dernière modification par Curios (03-10-2007 13:20:24)

Hors ligne

 

#9 03-10-2007 13:57:20

rincevent  
Modérateur
Award: bf
Lieu: Belgique
Date d'inscription: 06-02-2007
Messages: 722
Pépites: 100,002,023
Banque: 0

Re: [RESOLU] Problème avec la dll crypt32

Mais de rien, c'est toujours un plaisir d'aider quelqun de poli et qui n'écrit pas en SMS :-)

pour la déclaration j'ai trouvé ça :

Code: pb

FUNCTION boolean CryptBinaryToString ( &
    Blob pbBinary, &
    ulong cbBinary, &
    ulong dwFlags, &
    Ref string pszString, &
    Ref ulong pcchString ) &
LIBRARY "crypt32.dll" ALIAS FOR "CryptBinaryToStringA"



ou alors, c'est surement pas ça mais : est tu sûr d'avoir les bonnes valeurs pour

Code: pb

ls_pathdll =  gs_tpu_directory + "\crypt32.dll"

au moment de l'exécution sur le serveur ?

Parceque à mon avis si par exemple le chemin ainsi concaténé n'est pas correct alors windows va rechercher le fichier crypt32.dll dans les répertoires du path et comme le serveur en a justement une vieille version...


sinon tu peux pas tout simplement mettre à jour la dll sur le serveur ?

Dernière modification par rincevent (03-10-2007 14:00:05)


http://img114.imageshack.us/img114/8519/userbar175801nb.gif
Pourquoi ne puis-je vivre comme n'importe quel être humain ? Pourquoi mon destin est-il de ne pouvoir cesser de me battre ?

Hors ligne

 

#10 03-10-2007 15:39:36

Curios  
Membre Geek
Date d'inscription: 27-04-2007
Messages: 24
Pépites: 149
Banque: 0

Re: [RESOLU] Problème avec la dll crypt32

Merci pour ta réponse,

mais je viens de trouver une alternative.
J'ai récupéré la dll que je met dans le répertoire de l'application et que j'ai renommé crypt32AMOI.dll

ensuite je fait appel à cette dll avec la fonction externe:
FUNCTION ulong CryptBinaryToStringA(ulong hLibModule) LIBRARY "crypt32AMOI.dll"

Comme il trouve qu'une dll avec ce nom je n'ai pas de conflit.

Merci pour toutes vos réponses.

Hors ligne

 

#11 04-10-2007 07:38:02

rincevent  
Modérateur
Award: bf
Lieu: Belgique
Date d'inscription: 06-02-2007
Messages: 722
Pépites: 100,002,023
Banque: 0

Re: [RESOLU] Problème avec la dll crypt32

pas bête ;-)


http://img114.imageshack.us/img114/8519/userbar175801nb.gif
Pourquoi ne puis-je vivre comme n'importe quel être humain ? Pourquoi mon destin est-il de ne pouvoir cesser de me battre ?

Hors ligne

 

Pied de page des forums

Propulsé par FluxBB 1.2.22