Cette dll est faite pour récupérer la date et l'heure systeme et locale au format texte.
L'affichage est mis à jour grace à un timer.
Le problème, c'est qu'au bout d'un moment, on dirait que la dll se bloque, et l'affichage ne change plus.
Je vous passe les deux codes. Celui de la Dll, et celui du timer de test.
Il n'y a rien à changer dans le code du timer, puisque le problème se produit aussi dans l'application qui utilise la dll.
Si on change la durée du timer par exemple 100 ms au lieu de 10 ms, on attend simplement plus longtemps avant qu'elle ne se bloque, ce qui me fait penser que la dll se bloque au bout d'un certain nombre d'appels. Je vais chercher de ce côté là.
Et merci, également, de ne pas me proposer de librairie utilisateur, ça ne m'intéresse pas
Si quelqu'un peut me filer un coup de main, il est le bienvenu.
Créez la dll dans un dossier, enregistrez le code du timer dans le même dossier, lancez le et attendez quelques secondes. L'affichage des valeurs se bloque.
Code de la Dll : A compiler sous le nom "Date_System.dll"
Code : Tout sélectionner
ProcedureDLL.s GetLocal_Time()
If GetLocalTime_(@Tml.SYSTEMTIME)
ProcedureReturn RSet(Str(Tml\wHour),2,"0")+" : "+RSet(Str(Tml\wMinute),2,"0")+" : "+RSet(Str(Tml\wSecond),2,"0")
Else
ProcedureReturn #Null$
EndIf
EndProcedure
ProcedureDLL.s GetSystem_Time()
If GetSystemTime_(@Tml.SYSTEMTIME)
ProcedureReturn RSet(Str(Tml\wHour),2,"0")+" : "+RSet(Str(Tml\wMinute),2,"0")+" : "+RSet(Str(Tml\wSecond),2,"0")
Else
ProcedureReturn #Null$
EndIf
EndProcedure
ProcedureDLL.s GetDate_Short_N()
If GetSystemTime_(@Tml.SYSTEMTIME)
ProcedureReturn RSet(Str(Tml\wDay),2,"0")+" / "+RSet(Str(Tml\wMonth),2,"0")+" / "+RSet(Str(Tml\wYear),4,"0")
Else
ProcedureReturn #Null$
EndIf
EndProcedure
ProcedureDLL.s GetDate_Short_A()
If GetSystemTime_(@Tml.SYSTEMTIME)
Restore Mois
For i = 1 To Tml\wMonth
Read Mois$
Next
ProcedureReturn RSet(Str(Tml\wDay),2,"0")+" "+Mois$+" "+RSet(Str(Tml\wYear),4,"0")
Else
ProcedureReturn #Null$
EndIf
EndProcedure
ProcedureDLL.s GetDate_Long_A()
If GetSystemTime_(@Tml.SYSTEMTIME)
Restore Mois
For i = 1 To Tml\wMonth
Read Mois$
Next
Restore Jour
For i = 0 To Tml\wDayOfWeek
Read Jour$
Next
ProcedureReturn Jour$ + " "+RSet(Str(Tml\wDay),2,"0")+" "+Mois$+" "+RSet(Str(Tml\wYear),4,"0")
Else
ProcedureReturn #Null$
EndIf
EndProcedure
ProcedureDLL.s GetDate_Long_N()
If GetSystemTime_(@Tml.SYSTEMTIME)
Restore Mois
For i = 1 To Tml\wMonth
Read Mois$
Next
Restore Jour
For i = 0 To Tml\wDayOfWeek
Read Jour$
Next
ProcedureReturn Jour$ + " "+RSet(Str(Tml\wDay),2,"0")+" / "+RSet(Str(Tml\wMonth),2,"0")+" / "+RSet(Str(Tml\wYear),4,"0")
Else
ProcedureReturn #Null$
EndIf
EndProcedure
ProcedureDLL.s GetDay_Name()
If GetSystemTime_(@Tml.SYSTEMTIME)
Restore Jour
For i = 0 To Tml\wDayOfWeek
Read Jour$
Next
ProcedureReturn Jour$
Else
ProcedureReturn #Null$
EndIf
EndProcedure
ProcedureDLL.s GetMonth_Name()
If GetSystemTime_(@Tml.SYSTEMTIME)
Restore Mois
For i = 1 To Tml\wMonth
Read Mois$
Next
ProcedureReturn Mois$
Else
ProcedureReturn #Null$
EndIf
EndProcedure
ProcedureDLL.s ConvertMonth_Name(M)
If M >=1 And M <=12
Restore Mois
For i = 1 To M
Read Mois$
Next
ProcedureReturn Mois$
Else
ProcedureReturn #Null$
EndIf
EndProcedure
DataSection
Mois:
Data.s "Janvier","Fevrier","Mars","Avril","Mai","Juin","Juillet","Août","Septembre","Octobre","Novembre","Décembre"
Jour:
Data.s "Dimanche","Lundi","Mardi","Mercredi","Jeudi","Vendredi","Samedi"
EndDataSectionCode : Tout sélectionner
; PureBasic Visual Designer v3.92 build 1460
;- Window Constants
;
Enumeration
#Win_0
EndEnumeration
;- Gadget Constants
;
Enumeration
#String_0
#String_1
#String_2
#String_3
#String_4
#String_5
#String_6
#String_7
#String_8
EndEnumeration
Procedure Open_Win()
If OpenWindow(#Win_0, 396, 128, 210, 285, #PB_Window_SystemMenu | #PB_Window_SizeGadget | #PB_Window_TitleBar , "Test")
If CreateGadgetList(WindowID())
StringGadget(#String_1, 10, 40, 190, 25, "")
StringGadget(#String_0, 10, 10, 190, 25, "")
StringGadget(#String_2, 10, 70, 190, 25, "")
StringGadget(#String_3, 10, 100, 190, 25, "")
StringGadget(#String_4, 10, 130, 190, 25, "")
StringGadget(#String_5, 10, 160, 190, 25, "")
StringGadget(#String_6, 10, 190, 190, 25, "")
StringGadget(#String_7, 10, 220, 190, 25, "")
StringGadget(#String_8, 10, 250, 190, 25, "")
EndIf
EndIf
EndProcedure
Procedure TimerProc(hwnd.l, uMsg.l, idEvent.l, dwTime.l)
Select uMsg
Case #WM_TIMER
Select idEvent
Case 1
SetGadgetText(#String_0, PeekS(CallFunction(0,"GetLocal_Time")))
SetGadgetText(#String_1, PeekS(CallFunction(0,"GetSystem_Time")))
SetGadgetText(#String_2, PeekS(CallFunction(0,"GetDate_Short_N")))
SetGadgetText(#String_3, PeekS(CallFunction(0,"GetDate_Short_A")))
SetGadgetText(#String_4, PeekS(CallFunction(0,"GetDate_Long_N")))
SetGadgetText(#String_5, PeekS(CallFunction(0,"GetDate_Long_A")))
SetGadgetText(#String_6, PeekS(CallFunction(0,"GetDay_Name")))
SetGadgetText(#String_7, PeekS(CallFunction(0,"GetMonth_Name")))
SetGadgetText(#String_8, PeekS(CallFunction(0,"ConvertMonth_Name",6)))
EndSelect
EndSelect
EndProcedure
Open_Win()
If OpenLibrary(0, "Date_System.dll") = 0
End
EndIf
SetTimer_(WindowID(#Win_0), 1, 10, @TimerProc())
Repeat
Until WindowEvent() = #PB_EventCloseWindow
End