Page 1 sur 1

Problème avec mes dll

Publié : jeu. 13/mai/2004 17:58
par gansta93
Salut tout le monde,

Je fais des dll et à chaque foies que je les teste, le programme qui les ouvre plante.
J'ai essayer avec un prog en PureBasic et Rundll et rundll32, et le résultat était le même avec les deux et avec toutes mes dll.

Comment ça se fait!

Publié : jeu. 13/mai/2004 18:27
par nico
Je vais reprendre une réplique de Chris:

C'est à cause de ça!

Avec si peu d'élément...poste du code!

:)

Publié : jeu. 13/mai/2004 19:35
par gansta93
Salut tlm voici les codes dont je vous parlais... deux essais que j'avais fait et pui qui comme vous le savez s'exécutent mais font planter les prog qui les lencent.
DLL toutes bêtes, mais bon...
premier code:
ProcedureDLL ouvre()
fichier$=OpenFileRequester("Ouvrire un fichier","d:\lol.txt","Texte|*.txt;*.g93|Document Word|*.doc|Music|*.mp3;*.wav",0)
If fichier$
MessageRequester("lol",fichier$+" a été sélectionné.",0)
Else
MessageRequester("lol","Aucun fichier sélectionné.",0)
EndIf
EndProcedure
ProcedureDLL cherche()
rep$=PathRequester("Sélectionner un répertoire","D:\Cours")
If rep$
MessageRequester("Lol","Le répertoir sélectionné est: "+rep$,0)
Else
MessageRequester("Lol","Aucun répertoir sélectionné",0)
EndIf
EndProcedure

deuxième code:
ProcedureDLL lol()
MessageRequester("lol","Vous rigolez?",0)
SetupPromptReboot_(0,0,0)
MessageRequester("lol!","Vous rigolez toujours?",0)
EndProcedure

Publié : jeu. 13/mai/2004 20:17
par nico
Avant de te corriger, je voudrais que tu me montres comment tu fais pour appeler ta dll et les fonctions car tu dois aussi avoir des problèmes de ce coté là.

Ainsi, je pourrais mieux t'expliquer :)

Publié : ven. 14/mai/2004 9:57
par gansta93
nico a écrit :Avant de te corriger, je voudrais que tu me montres comment tu fais pour appeler ta dll et les fonctions car tu dois aussi avoir des problèmes de ce coté là.

Ainsi, je pourrais mieux t'expliquer :)
J'ai fais ça dans exécuter et rundll32 mais aussi:
if Openlibrary(1,"d:\lol.dll")
if callfunction(1,"lol") ; ou autre fonction peux importe...
closelibrary(1)
endif
endif
end
;Messages d'erreures possible à insérer dans le code...

Voila ça marchait mais le prog marchait il exécutait la fonction mais plantait avant la fin vu que j'avais mis un msg qui disait que la dll ct bien exécutée.

Publié : ven. 14/mai/2004 11:42
par nico
La Dll ci dessous doit être enregistrée sous le nom de "forum.dll.

Code : Tout sélectionner

Global fichier$
Global rep$
  
ProcedureDLL.l ouvre()
  fichier$=OpenFileRequester("Ouvrire un fichier","d:\lol.txt","Texte|*.txt;*.g93|Document Word|*.doc|Music|*.mp3;*.wav",0) 
  If fichier$ 
    MessageRequester("lol",fichier$+" a été sélectionné.",0) 
  Else 
    MessageRequester("lol","Aucun fichier sélectionné.",0) 
  EndIf 
  ProcedureReturn @fichier$ 
EndProcedure 

ProcedureDLL.l cherche() 
  rep$=PathRequester("Sélectionner un répertoire","D:\Cours") 
  If rep$ 
    MessageRequester("Lol","Le répertoir sélectionné est: "+rep$,0) 
  Else 
    MessageRequester("Lol","Aucun répertoir sélectionné",0) 
  EndIf
  ProcedureReturn @rep$
EndProcedure 

;deuxième code: 
ProcedureDLL lol() 
  MessageRequester("lol","Vous rigolez?",0) 
  SetupPromptReboot_(0,0,0) 
  MessageRequester("lol!","Vous rigolez toujours?",0) 
EndProcedure


Le programme qui va appeller la Dll, à enregistrer sous le même répertoire que la Dll.
Il n'y a pas le chemin complet de déclaré puique le programme se situe dans le même répertoire que la Dll.

Code : Tout sélectionner

#Librairie=0

If  OpenLibrary(#Librairie, "forum.dll") 
  *pointeur=CallFunction(#Librairie, "ouvre")
  Debug PeekS(*pointeur)
  
  *pointeur=CallFunction(#Librairie, "cherche")
  Debug PeekS(*pointeur)  
  
  CallFunction(#Librairie, "lol")
  
  CloseLibrary(#Librairie)
EndIf
Désolé, pas le temps pour les explications....

Publié : ven. 14/mai/2004 12:16
par gansta93
Merci, ça marche avec le programme qui exécute, mais pourquoi n'est-il pas possible de l'exécuter avec rundll? ça le fait plenter avec l'erreure Rundll32 a effectué une opération non conforme.
Oui je suis lourd mais bon... ça peut être util.

Publié : ven. 14/mai/2004 15:38
par nico

Code : Tout sélectionner

If OpenLibrary(0,"setupapi.dll")
  If CallFunction(0,"SetupPromptReboot",0, 0, 0)=-1
    MessageRequester("Info","Erreur!",#PB_MessageRequester_Ok) 
  EndIf
  CloseLibrary(0)
EndIf