Publié : jeu. 13/août/2009 21:35
Et avec +12 ?
(Sous-entendu les bugs)NY152 a écrit :je préfèrerais éviter ça.
Code : Tout sélectionner
Declare Function InitLib Lib "MaLib.DLL" () As Integer
Declare Function TestLib Lib "MaLib.DLL" () As String
Declare Function CloseLib Lib "MaLib.DLL" () As Integer
Sub Main()
InitLib()
MsgBox TestLib()
CloseLib()
End Sub
Code : Tout sélectionner
Macro ProcedureReturnSysStringGlobal(VarName)
! mov eax, [v_#VarName]
! mov [esp + 16], eax
ProcedureReturn
EndMacro
Global SPtr.I
ProcedureDLL.I InitLib()
SPtr = SysAllocStringByteLen_(" ", 1)
ProcedureReturn 1
EndProcedure
ProcedureDLL.I TestLib()
SPtr = SysReAllocString_(SPtr, "Petit message ok")
ProcedureReturnSysStringGlobal(SPtr)
EndProcedure
ProcedureDLL.I CloseLib()
SysFreeString_(SPtr)
ProcedureReturn 1
EndProcedure
Je ma mal exprimaé ! InitLib() et CloseLib() n'existeront pas! La ligne de code de InitLib() (« SPtr = SysAllocStringByteLen_(" ", 1) » la fonction API que l'on a testé et retesté un bon paquet de fois!) sera à insérer dans Init_Winamp(). Et Init_Winamp() reste à exécuter une seule fois. Idem pour CloseLib(), où son code est inséré dans Close_Winamp().NY152 a écrit :La solution initlib / closelib ne peut pas avoir cours pour mon code.
Et non:[Alloc] -> [Realloc1] -> [Realloc2] -> [Libération]
Pour VB2008, c'est comme tu veux. Le but c'est quand même qu'on débugue le gros code que tu m'as transmis. Donc, si on s'épargne de deux tests avant de commencer ça, moi ça ne me dérange pas![Alloc1] -> [Realloc1] -> [Libération1] -> [Alloc2] -> [Realloc2] -> [Libération2]
Des qu'on applique ce modèle aux fonction de la DLL pour les plugins ça coince. En fait les fonctions des plugins ont été écrites en PB pour PB et ça doit être ça qui coince.NY152 a écrit :Je me suis amusé à faire 3 fonctions :
J'ai fais une boucle sur le dossier Windows, ça n'a jamais planté.Code : Tout sélectionner
ProcedureDLL.I RetourneRepertoire(Chemin$) Protected Repertoire.S Repertoire=GetPathPart(Chemin$) ProcedureReturn SysAllocStringByteLen_(Repertoire,Len(Repertoire)) EndProcedure ProcedureDLL.I RetourneFichier(Chemin$) Protected Fichier.S Fichier=GetFilePart(Chemin$) ProcedureReturn SysAllocStringByteLen_(Fichier,Len(Fichier)) EndProcedure ProcedureDLL.I RetourneExtension(Chemin$) Protected Extension.S Extension=GetExtensionPart(Chemin$) ProcedureReturn SysAllocStringByteLen_(Extension,Len(Extension)) EndProcedure
Je commence à me demander si les fonctions de Winamp ne sont pas trop lente dans le sens "libération" du terme.
EDIT :
On m'a dit que les DLL Windows devait avoir ce code en plus du reste :Je pense qu'elle servent à déclarer/libérer tout le toutim mais sans vraiment avoir creusé la chose, je m'abstiendrais de dire une bêtise lolCode : Tout sélectionner
ProcedureDLL AttachProcess(Instance) EndProcedure ProcedureDLL DetachProcess(Instance) EndProcedure ProcedureDLL AttachThread(Instance) EndProcedure ProcedureDLL DetachThread(Instance) EndProcedure
Code : Tout sélectionner
Declare Function InitLib Lib "MaLib.DLL" () As Integer
Declare Function TestLib Lib "MaLib.DLL" () As String
Declare Function CloseLib Lib "MaLib.DLL" () As Integer
Sub Main()
InitLib()
MsgBox TestLib()
CloseLib()
End Sub
Code : Tout sélectionner
Macro ProcedureReturnSysStringGlobal(VarName)
! mov eax, [v_#VarName]
! mov [esp + 16], eax
ProcedureReturn
EndMacro
Global SPtr.I
ProcedureDLL.I InitLib()
SPtr = SysAllocStringByteLen_(" ", 1)
ProcedureReturn 1
EndProcedure
ProcedureDLL.I TestLib()
SPtr = SysReAllocString_(SPtr, "Petit message ok")
ProcedureReturnSysStringGlobal(SPtr)
EndProcedure
ProcedureDLL.I CloseLib()
SysFreeString_(SPtr)
ProcedureReturn 1
EndProcedure
Code : Tout sélectionner
Dim Test As String
Test = Dir("C:\windows\*.*")
Do While Test <> ""
Text1.Text = Text1.Text & vbNewLine & RetourneFichier(Test) & " (" & RetourneExtension(Test) & ")"
Test = Dir()
Loop
Ah, ok, je croise les doigts pour que ça marche...NY152 a écrit :Pour le résultat du code que tu as mis je ferais un edit dans quelques minutes.