Dr. Dri a écrit :Si quelqu'un a une piste pour connaître le nombre d'arguments d'une dll je suis preneur...
Au cas ou, j'ai trouvé un bout de code sur CodeArchiv.
J'ai récupéré l'essentiel, j'ai viré l'interface en "klingon", (c'est de l'autre côté du Rhin, la Klingonie

) et je sors les noms et le nombre de paramètres en "Debug".
Le problème avec ce bout de code, c'est que par moment, le nombre de paramètres qu'il annonce ne correspond pas au descriptions du SDK.
J'ai beau chercher, je ne vois pas ce qui cloche.
Si c'est toujours d'actualité, et que tu veux y jeter un oeil, tu auras peut-être plus de chance que moi.
Voilà le code:
Code : Tout sélectionner
Procedure BadName(Name.s)
Result=0
If FindString(UCase(Name.s),"DLLENTRYPOINT",1):Result=-1:EndIf
If FindString(UCase(Name.s),"DLLCANUNLOADNOW",1):Result=-1:EndIf
If FindString(UCase(Name.s),"DLLGETCLASSOBJECT",1):Result=-1:EndIf
If FindString(UCase(Name.s),"DLLREGISTERSERVER",1):Result=-1:EndIf
If FindString(UCase(Name.s),"DLLUNREGISTERSERVER",1):Result=-1:EndIf
If UCase(Name.s)="ATTACHPROCESS":Result=-1:EndIf
If UCase(Name.s)="DETACHPROCESS":Result=-1:EndIf
If UCase(Name.s)="ATTACHTHREAD":Result=-1:EndIf
If UCase(Name.s)="DETACHTHREAD":Result=-1:EndIf
If UCase(Name.s)="DLLINITIALIZE":Result=-1:EndIf
If Len(Name.s)>100:Result=-1:EndIf
If Left(Name.s,1)="?":Result=-1:EndIf
If UCase(Name.s)="DUMMY":Result=-1:EndIf
ProcedureReturn Result
EndProcedure
Procedure.l hex2dec(h$)
h$ = UCase(h$)
For r = 1 To Len(h$)
d << 4 : a$ = Mid(h$, r, 1)
If Asc(a$) > 60
d + Asc(a$) - 55
Else
d + Asc(a$) - 48
EndIf
Next
ProcedureReturn d
EndProcedure
Procedure GetNumberOfParam(Pointer)
Repeat
Pointer = DisASMCommand(Pointer)
ASM_Code.s = UCase(GetDisASMString())
Until FindString(ASM_Code.s,"RET",1)
Bytes = hex2dec(Right(ASM_Code.s,Len(ASM_Code.s) -4))
If Bytes %4 Or Bytes >200 : Bytes = -1 : EndIf
If Bytes >= 0 : Bytes = Bytes >> 2 : EndIf
ProcedureReturn Bytes
EndProcedure
Inst = OpenLibrary(1,"user32.dll")
If ExamineLibraryFunctions(1)
While NextLibraryFunction()<>0
Name.s = LibraryFunctionName()
Addr = LibraryFunctionAddress()
Param = GetNumberOfParam(Addr)
If BadName(Name) <> -1
Debug Name+" "+Str(Param)
EndIf
Wend
EndIf
Pour le code original, c'est dans "CodeArchiv\Other\Programming_Tools" et ça s'appelle "PBL-Creator.pb"
(Si tu veux le code, je le poste aussi, m'en fous moi

)