PB5 Beta6
Ich hoffe mal, das es nicht nur ein Denkfehler von mir ist.
Wenn man folgenden code in der IDE mit Debugger ausführt, bekommt man (ich) einen "Ungültiger Speicherzugriff" Fehler (Schreibfehler an Adresse 4). -> Zeile 39
Dort möchte ich einen string an die erste Stelle einer Struktur schreiben. Wie gesagt es geht nicht, aber wenn ich die Stringvariable, der Struktur, an einer andere stelle in der Struktur platzier, dann läuft der code ohne Probleme.? Mich stört es im Moment nicht, aber so ist es, denke ich, nicht gedacht oder?
Achso das wichtigste. Den Speicherfehler bekomme ich wenn ich den 32bit Compiler benutze, mit dem 64bit Compiler läuft es garnicht, die IDE hängt, bis die Windowsfehlermeldung "Purebasic_Compilation1.exe reagiert nicht mehr. Wollen sie einen Fehlerbericht blablabla........" kommt.
Wie gesagt alles nur mit eingeschalteten Debugger.
das ist die Struktur die verantwortlich ist:
Code: Alles auswählen
Structure Class_MultipartFormdata
szLastClassError.s
InterfaceMultipartFormdata.InterfaceMultipartFormdata
FormdataParts.FormdataParts
blIsInProgress.b
EndStructure
Code: Alles auswählen
EnableExplicit
Interface MultipartFormdata
StartMultipartFormdata.i(szHostName.s, szUrlPart.s, szUserAgent.s, szBoundry.s)
EndInterface
Structure InterfaceMultipartFormdata
*v_class_multipart_formdata
EndStructure
Structure FormdataParts
szHostName.s
szUrlPart.s
szUserAgent.s
szBoundry.s
nContenLength.l
EndStructure
Structure Class_MultipartFormdata
szLastClassError.s
InterfaceMultipartFormdata.InterfaceMultipartFormdata
FormdataParts.FormdataParts
blIsInProgress.b
EndStructure
Procedure.i StartMultipartFormdata(*This.Class_MultipartFormdata, szHostName.s = #NULL$, szUrlPart.s = #NULL$, szUserAgent.s = "PB5", szBoundry.s = "xYzZY")
Protected szcHostName.s{#MAX_PATH}, szWorkString.s
Protected n.i
If (*This\blIsInProgress = #True)
*This\szLastClassError = "allready in progress"
ProcedureReturn 0
EndIf
If (szHostName = #NULL$)
n = gethostname_(@szcHostName, #MAX_PATH)
If (n = #SOCKET_ERROR)
*This\szLastClassError = "error getting hostname"
*This\FormdataParts\szHostName = "localhost"
Else
*This\FormdataParts\szHostName = szHostName
EndIf
EndIf
If (szUrlPart = #NULL$)
*This\szLastClassError = "error url"
ProcedureReturn 0
Else
If (FindString(szUrlPart, "http://"))
*This\FormdataParts\szUrlPart = "/" + GetFilePart(szUrlPart)
ElseIf (FindString(szUrlPart, "www."))
*This\FormdataParts\szUrlPart = "/" + GetFilePart(szUrlPart)
Else
*This\szLastClassError = "error getting url part"
ProcedureReturn 0
EndIf
EndIf
If (szUserAgent = #NULL$)
*This\FormdataParts\szUserAgent = "Multipartform"
Else
*This\FormdataParts\szUserAgent = szUserAgent
EndIf
If (szBoundry = #NULL$)
*This\FormdataParts\szBoundry = "xoXox"
Else
*This\FormdataParts\szBoundry = szBoundry
EndIf
ProcedureReturn 1
EndProcedure
Procedure.i _Initialize_Class_MultipartFormdata(*This.Class_MultipartFormdata)
ProcedureReturn *This\InterfaceMultipartFormdata
EndProcedure
Procedure.i CreateObject_MultipartFormdata()
Protected *This.Class_MultipartFormdata
*This = AllocateMemory(SizeOf(Class_MultipartFormdata))
If (*This = 0): Debug "error allocating memory for class Class_MultipartFormdata"
ProcedureReturn 0
EndIf
InitializeStructure(*This, Class_MultipartFormdata)
*This\InterfaceMultipartFormdata\v_class_multipart_formdata = ?_v_class_multipart_formdata
ProcedureReturn _Initialize_Class_MultipartFormdata(*This)
EndProcedure
Procedure.i _Destroy_Class_MultipartFormdata(*This.Class_MultipartFormdata)
ProcedureReturn *This
EndProcedure
Procedure.i FreeObject_MultipartFormdata(*This.Class_MultipartFormdata)
_Destroy_Class_MultipartFormdata(*This)
ClearStructure(*This, Class_MultipartFormdata)
FreeMemory(*This)
ProcedureReturn 0
EndProcedure
DataSection
_v_class_multipart_formdata:
Data.i @StartMultipartFormdata()
EndDataSection
Define *Class.MultipartFormdata = CreateObject_MultipartFormdata()
If *Class
Debug *Class\StartMultipartFormdata("", "http://www.google.de", "", "")
EndIf