GetLastError_() » Windowsfehlermeldungen erhalten
@PMV:
Kommt drauf an wie viele Fehler man macht ^^.
Ansonnst hast schon recht. Kommt immer auf den Anwendungsfall an.
Kommt drauf an wie viele Fehler man macht ^^.
Ansonnst hast schon recht. Kommt immer auf den Anwendungsfall an.
Projekte: IO.pbi, vcpu
Pausierte Projekte: Easy Network Manager, µC Emulator
Aufgegebene Projekte: ECluster

PB 5.1 x64/x86; OS: Win7 x64/Ubuntu 10.x x86
Pausierte Projekte: Easy Network Manager, µC Emulator
Aufgegebene Projekte: ECluster
PB 5.1 x64/x86; OS: Win7 x64/Ubuntu 10.x x86
> Es ist doch die Sache eines jeden einzelnen wie und ob er seinen Code optimiert. Manchmal macht es was aus ob eine Funktion 40 anstatt 50 us zum Ausführen braucht.
Wenn der Preis dafür ist das das Programm abstürzt (PB 4.20), dann hat man definitv was falsch gemacht
Wenn man das ganze dann auch noch als Tip postet sollte man sich über solche "Optimierungen" doppelt Gedanken machen.
Sinnloses Optimieren richtet meistens mehr Schaden an als es nützt.
Wenn der Preis dafür ist das das Programm abstürzt (PB 4.20), dann hat man definitv was falsch gemacht

Wenn man das ganze dann auch noch als Tip postet sollte man sich über solche "Optimierungen" doppelt Gedanken machen.
Sinnloses Optimieren richtet meistens mehr Schaden an als es nützt.
- Josef Sniatecki
- Beiträge: 657
- Registriert: 02.06.2008 21:29
- Kontaktdaten:
Ja ich weiß schon, was fixed strings sind und was "{...}" bedeutet,AND51 hat geschrieben:Also ich habe es unter Vista mit PB 4.30 BETA 4 getestet.
Als ich dann von Unicode auf ASCII wechselte, merkte ich, dass kein String ausgegeben wird. Die Lösung war, in der FormatMessage_() Zeile den die angegebene Buffergröße um 1 bzw 2 Byte zu verringern.
@ Josef:
Der Sinn von {1<<16} ist ja gerade, dass man sich die Space()-Funktion sparen kann. Benutzt du auch 4.20?
Erklärung, die mir hinterher doch überflüssig erscheint, weil ich glaube, dass Josef das schon weiß, die mir aber zu schade ist, sie wieder zu löschen:
Dies bewirkt, dass ein String mit fester Länge ("fixed string") definiert wird, der sozusagen "von Hause aus" den benötigten Speicherplatz bereithält. Es stehen zu Anfang 1<<16, also 65536 Nullen im String. Space() bräuchte allerdings erst etwas Zeit um den String manuell mit Leerzeichen zu füllen.
trotzdem funktioniert es bei mir nur durch "space(...)" bei mir.
Noch was: Habe 4.20
So, damit wäre das mal geklärt

PB 4.61 | Windows Vista - 32Bit
Homepage
"Wahrlich es ist nicht das Wissen, sondern das Lernen, nicht das Besitzen sondern das Erwerben, nicht das Dasein, sondern das Hinkommen, was den grössten Genuss gewährt." - Carl Friedrich Gauß
Homepage
"Wahrlich es ist nicht das Wissen, sondern das Lernen, nicht das Besitzen sondern das Erwerben, nicht das Dasein, sondern das Hinkommen, was den grössten Genuss gewährt." - Carl Friedrich Gauß
PB 4.20 ... echt? ... hät ich dir auch sagen könnenJosef Sniatecki hat geschrieben:Ja ich weiß schon, was fixed strings sind und was "{...}" bedeutet,
trotzdem funktioniert es bei mir nur durch "space(...)" bei mir.
Noch was: Habe 4.20
So, damit wäre das mal geklärt

... ich würd dir mal empfehlen alles in einem Thread zu lesen, in dem du
aktiv bist.

MFG PMV
- Josef Sniatecki
- Beiträge: 657
- Registriert: 02.06.2008 21:29
- Kontaktdaten:
Ich weißPMV hat geschrieben:PB 4.20 ... echt? ... hät ich dir auch sagen könnenJosef Sniatecki hat geschrieben:Ja ich weiß schon, was fixed strings sind und was "{...}" bedeutet,
trotzdem funktioniert es bei mir nur durch "space(...)" bei mir.
Noch was: Habe 4.20
So, damit wäre das mal geklärt
... ich würd dir mal empfehlen alles in einem Thread zu lesen, in dem du
aktiv bist.![]()
MFG PMV

antworten. Die weiteren sind ja schon fast offTopic (genauso wie dieser).
Gruß Josef
PB 4.61 | Windows Vista - 32Bit
Homepage
"Wahrlich es ist nicht das Wissen, sondern das Lernen, nicht das Besitzen sondern das Erwerben, nicht das Dasein, sondern das Hinkommen, was den grössten Genuss gewährt." - Carl Friedrich Gauß
Homepage
"Wahrlich es ist nicht das Wissen, sondern das Lernen, nicht das Besitzen sondern das Erwerben, nicht das Dasein, sondern das Hinkommen, was den grössten Genuss gewährt." - Carl Friedrich Gauß
Dann wüsstest du, dass Space() nicht die einzige Alternative ist.
Oder du hast die anderen Beiträge nicht verstanden ... die sich alle auf
den selben Post bezogen, den Zitierten von dir von AND51.
Mach mal aus "1<<16" ne 1000 oder noch was kleineres und änder das in
FormatMessage_() auch um.
MFG PMV
Oder du hast die anderen Beiträge nicht verstanden ... die sich alle auf
den selben Post bezogen, den Zitierten von dir von AND51.

Mach mal aus "1<<16" ne 1000 oder noch was kleineres und änder das in
FormatMessage_() auch um.

MFG PMV
Hallo!
Bin später zum Antworten gekommen, als ich dachte. Auf geht's:
> 64k für eine Fehlermeldung ist totaler Overkill
Das stimmt. Da habe ich vorher nicht dran gedacht. Ich habe lediglich den Hinweis auf der MSDN Seite gesehen, FormatMessage_() hat 64 KB als maximales Buffer-Maximum. Ich werde das in Kürze ändern.
> typische Optimierungswahn
Nun, ist es nicht schneller, einen festen String zu allokieren, statt einen 'dynamischen'; dessen Speicher erst vergrößert werden muss, um n Spaces aufzunehmen? Das war mein Gedanke, den ich dabei hatte. Ich wollte mir im Grunde lediglich das Space(1000) sparen. Das habe ich in einem PB-Tutorial gelesen, welches als Alternative zudas hier empfohlen hat:Find ich rech raffiniert.
> Wenn der Preis dafür ist das das Programm abstürzt (PB 4.20)
Nun, dass PB 4.20 Probleme mit solch großen Fixed-Strings hat, war mir nicht bewusst. Wie dem auch sei, ich werde den Buffer verkleinern.
@ All:
Vielen Dank für eure zahlreichen Posts und Rückmeldungen! Ich fand diese Prozedur eine gute Warmhalte-Übung, da ich seit Wochen leider nicht mehr in PB-Programmiere, weil ich z. Zt. nur wenig Zeit, aber noch weniger Ideen habe.
Bin später zum Antworten gekommen, als ich dachte. Auf geht's:
> 64k für eine Fehlermeldung ist totaler Overkill
Das stimmt. Da habe ich vorher nicht dran gedacht. Ich habe lediglich den Hinweis auf der MSDN Seite gesehen, FormatMessage_() hat 64 KB als maximales Buffer-Maximum. Ich werde das in Kürze ändern.
> typische Optimierungswahn
Nun, ist es nicht schneller, einen festen String zu allokieren, statt einen 'dynamischen'; dessen Speicher erst vergrößert werden muss, um n Spaces aufzunehmen? Das war mein Gedanke, den ich dabei hatte. Ich wollte mir im Grunde lediglich das Space(1000) sparen. Das habe ich in einem PB-Tutorial gelesen, welches als Alternative zu
Code: Alles auswählen
buffer$=Space(1000)
; und
*buffer=AllocateMemory(1000)
Code: Alles auswählen
buffer.s{1000}
> Wenn der Preis dafür ist das das Programm abstürzt (PB 4.20)
Nun, dass PB 4.20 Probleme mit solch großen Fixed-Strings hat, war mir nicht bewusst. Wie dem auch sei, ich werde den Buffer verkleinern.
@ All:
Vielen Dank für eure zahlreichen Posts und Rückmeldungen! Ich fand diese Prozedur eine gute Warmhalte-Übung, da ich seit Wochen leider nicht mehr in PB-Programmiere, weil ich z. Zt. nur wenig Zeit, aber noch weniger Ideen habe.

PB 4.30
Code: Alles auswählen
Macro Happy
;-)
EndMacro
Happy End
Verwende ich schon seit langen...
Funktioniert so auch mit Unicode ohne irgendwelchen Speicher zu allokieren.
FF 
Funktioniert so auch mit Unicode ohne irgendwelchen Speicher zu allokieren.
Code: Alles auswählen
Procedure.s FormatMessage(ErrorNumber.l)
Protected *Buffer, len, result.s
len = FormatMessage_(#FORMAT_MESSAGE_ALLOCATE_BUFFER|#FORMAT_MESSAGE_FROM_SYSTEM,0,ErrorNumber,0,@*Buffer,0,0)
If len
result = PeekS(*Buffer, len - 2)
LocalFree_(*Buffer)
ProcedureReturn result
Else
ProcedureReturn "Errorcode: " + Hex(ErrorNumber)
EndIf
EndProcedure
Debug FormatMessage($8000ffff)

Alles ist möglich, fragt sich nur wie...
Projekte ThreadToGUI / EventDesigner V3 / OOP-BaseClass-Modul
Downloads auf MyWebspace / OneDrive
Projekte ThreadToGUI / EventDesigner V3 / OOP-BaseClass-Modul
Downloads auf MyWebspace / OneDrive
- Josef Sniatecki
- Beiträge: 657
- Registriert: 02.06.2008 21:29
- Kontaktdaten:
Danke. Einen API-Guru muss man haben. 

PB 4.61 | Windows Vista - 32Bit
Homepage
"Wahrlich es ist nicht das Wissen, sondern das Lernen, nicht das Besitzen sondern das Erwerben, nicht das Dasein, sondern das Hinkommen, was den grössten Genuss gewährt." - Carl Friedrich Gauß
Homepage
"Wahrlich es ist nicht das Wissen, sondern das Lernen, nicht das Besitzen sondern das Erwerben, nicht das Dasein, sondern das Hinkommen, was den grössten Genuss gewährt." - Carl Friedrich Gauß