Pouvez-vous m'aider à trouver la solution.
Code : Tout sélectionner
Procedure ErrorHandler()
ErrorMessage$ = "A program error was detected:" + Chr(13)
ErrorMessage$ + Chr(13)
ErrorMessage$ + "Error Message: " + ErrorMessage() + Chr(13)
ErrorMessage$ + "Error Code: " + Str(ErrorCode()) + Chr(13)
ErrorMessage$ + "Code Address: " + Str(ErrorAddress()) + Chr(13)
If ErrorCode() = #PB_OnError_InvalidMemory
ErrorMessage$ + "Target Address: " + Str(ErrorTargetAddress()) + Chr(13)
EndIf
If ErrorLine() = -1
ErrorMessage$ + "Sourcecode line: Enable OnError lines support to get code line information." + Chr(13)
Else
ErrorMessage$ + "Sourcecode line: " + Str(ErrorLine()) + Chr(13)
ErrorMessage$ + "Sourcecode file: " + ErrorFile() + Chr(13)
EndIf
ErrorMessage$ + Chr(13)
ErrorMessage$ + "Register content:" + Chr(13)
CompilerSelect #PB_Compiler_Processor
CompilerCase #PB_Processor_x86
ErrorMessage$ + "EAX = " + Str(ErrorRegister(#PB_OnError_EAX)) + Chr(13)
ErrorMessage$ + "EBX = " + Str(ErrorRegister(#PB_OnError_EBX)) + Chr(13)
ErrorMessage$ + "ECX = " + Str(ErrorRegister(#PB_OnError_ECX)) + Chr(13)
ErrorMessage$ + "EDX = " + Str(ErrorRegister(#PB_OnError_EDX)) + Chr(13)
ErrorMessage$ + "EBP = " + Str(ErrorRegister(#PB_OnError_EBP)) + Chr(13)
ErrorMessage$ + "ESI = " + Str(ErrorRegister(#PB_OnError_ESI)) + Chr(13)
ErrorMessage$ + "EDI = " + Str(ErrorRegister(#PB_OnError_EDI)) + Chr(13)
ErrorMessage$ + "ESP = " + Str(ErrorRegister(#PB_OnError_ESP)) + Chr(13)
CompilerCase #PB_Processor_x64
ErrorMessage$ + "RAX = " + Str(ErrorRegister(#PB_OnError_RAX)) + Chr(13)
ErrorMessage$ + "RBX = " + Str(ErrorRegister(#PB_OnError_RBX)) + Chr(13)
ErrorMessage$ + "RCX = " + Str(ErrorRegister(#PB_OnError_RCX)) + Chr(13)
ErrorMessage$ + "RDX = " + Str(ErrorRegister(#PB_OnError_RDX)) + Chr(13)
ErrorMessage$ + "RBP = " + Str(ErrorRegister(#PB_OnError_RBP)) + Chr(13)
ErrorMessage$ + "RSI = " + Str(ErrorRegister(#PB_OnError_RSI)) + Chr(13)
ErrorMessage$ + "RDI = " + Str(ErrorRegister(#PB_OnError_RDI)) + Chr(13)
ErrorMessage$ + "RSP = " + Str(ErrorRegister(#PB_OnError_RSP)) + Chr(13)
ErrorMessage$ + "Display of registers R8-R15 skipped." + Chr(13)
CompilerCase #PB_Processor_PowerPC
ErrorMessage$ + "r0 = " + Str(ErrorRegister(#PB_OnError_r0)) + Chr(13)
ErrorMessage$ + "r1 = " + Str(ErrorRegister(#PB_OnError_r1)) + Chr(13)
ErrorMessage$ + "r2 = " + Str(ErrorRegister(#PB_OnError_r2)) + Chr(13)
ErrorMessage$ + "r3 = " + Str(ErrorRegister(#PB_OnError_r3)) + Chr(13)
ErrorMessage$ + "r4 = " + Str(ErrorRegister(#PB_OnError_r4)) + Chr(13)
ErrorMessage$ + "r5 = " + Str(ErrorRegister(#PB_OnError_r5)) + Chr(13)
ErrorMessage$ + "r6 = " + Str(ErrorRegister(#PB_OnError_r6)) + Chr(13)
ErrorMessage$ + "r7 = " + Str(ErrorRegister(#PB_OnError_r7)) + Chr(13)
ErrorMessage$ + "Display of registers r8-R31 skipped." + Chr(13)
CompilerEndSelect
MessageRequester("OnError example", ErrorMessage$)
End
EndProcedure
OnErrorCall(@ErrorHandler())
Structure MyStringBuilder
MyStringBuilderAllocateMemory.B
*MyStringBuilderMemoryID
MyStringBuilderSize.I
MyStringBuilderRemaining.I
MyStringBuilderPosition.I
EndStructure
Global MyStringBuilder.MyStringBuilder
Procedure.B StringBuilderClearString()
If MyStringBuilder\MyStringBuilderAllocateMemory = #True And MyStringBuilder\MyStringBuilderMemoryID <> 0
FreeMemory(MyStringBuilder\MyStringBuilderMemoryID)
MyStringBuilder\MyStringBuilderAllocateMemory = #False
MyStringBuilder\MyStringBuilderMemoryID = 0
MyStringBuilder\MyStringBuilderSize = 0
MyStringBuilder\MyStringBuilderRemaining = 0
MyStringBuilder\MyStringBuilderPosition = 0
ProcedureReturn 1
Else
ProcedureReturn 0
EndIf
EndProcedure
Procedure.I StringBuilderAddString(String.s)
If MyStringBuilder\MyStringBuilderAllocateMemory = #True And MyStringBuilder\MyStringBuilderMemoryID <> 0
If Len(String.s) > MyStringBuilder\MyStringBuilderRemaining.I
MyStringBuilder\MyStringBuilderMemoryID = ReAllocateMemory(MyStringBuilder\MyStringBuilderMemoryID, MemorySize(MyStringBuilder\MyStringBuilderMemoryID) + Len(String.s) * 10)
If MyStringBuilder\MyStringBuilderMemoryID <> 0
MyStringBuilder\MyStringBuilderRemaining = MemorySize(MyStringBuilder\MyStringBuilderMemoryID) - MyStringBuilder\MyStringBuilderPosition
MyStringBuilder\MyStringBuilderSize = MemorySize(MyStringBuilder\MyStringBuilderMemoryID)
OctetsWrite = PokeS(MyStringBuilder\MyStringBuilderMemoryID + MyStringBuilder\MyStringBuilderPosition, String.s)
If OctetsWrite > 0
MyStringBuilder\MyStringBuilderRemaining - OctetsWrite
MyStringBuilder\MyStringBuilderPosition + OctetsWrite
ProcedureReturn MyStringBuilder\MyStringBuilderRemaining
Else
ProcedureReturn -1
EndIf
Else
ProcedureReturn -1
EndIf
Else
OctetsWrite = PokeS(MyStringBuilder\MyStringBuilderMemoryID + MyStringBuilder\MyStringBuilderPosition, String.s)
If OctetsWrite > 0
MyStringBuilder\MyStringBuilderRemaining - OctetsWrite
MyStringBuilder\MyStringBuilderPosition + OctetsWrite
ProcedureReturn MyStringBuilder\MyStringBuilderRemaining
Else
ProcedureReturn -1
EndIf
EndIf
Else
MyStringBuilder\MyStringBuilderMemoryID = AllocateMemory(Len(String.s) * 10)
If MyStringBuilder\MyStringBuilderMemoryID <> 0
MyStringBuilder\MyStringBuilderAllocateMemory = #True
MyStringBuilder\MyStringBuilderRemaining = MemorySize(MyStringBuilder\MyStringBuilderMemoryID)
MyStringBuilder\MyStringBuilderSize = MemorySize(MyStringBuilder\MyStringBuilderMemoryID)
OctetsWrite = PokeS(MyStringBuilder\MyStringBuilderMemoryID, String.s)
If OctetsWrite > 0
MyStringBuilder\MyStringBuilderRemaining - OctetsWrite
MyStringBuilder\MyStringBuilderPosition + OctetsWrite
ProcedureReturn MyStringBuilder\MyStringBuilderRemaining
Else
ProcedureReturn -1
EndIf
Else
ProcedureReturn -1
EndIf
EndIf
EndProcedure
Procedure.S StringBuilderGetString()
If MyStringBuilder\MyStringBuilderAllocateMemory = #True And MyStringBuilder\MyStringBuilderMemoryID <> 0
ProcedureReturn PeekS(MyStringBuilder\MyStringBuilderMemoryID)
Else
ProcedureReturn ""
EndIf
EndProcedure
Abc$ = "A"
For I = 1 To 1000000
StringBuilderAddString(Abc$)
Next
MessageRequester("", "Ok")