API: SearchTreeforFile ergibt "Invalid Memory Access&qu

Windowsspezifisches Forum , API ,..
Beiträge, die plattformübergreifend sind, gehören ins 'Allgemein'-Forum.
MichaelW
Beiträge: 2
Registriert: 06.08.2006 19:45
Wohnort: Paderborn

API: SearchTreeforFile ergibt "Invalid Memory Access&qu

Beitrag von MichaelW »

Hallo Coding Gemeinschaft,

bisher eher im Bereich Visual Basic tätig bin ich nun auf PureBasic umgestiegen. Zuerst ein dickes Lob an die Entwickler dieses Compilers.
Hat man sich an den sequentiellen Programmierstil gewöhnt, kann man sich nur noch wundern, wie einfach sich so manches Problem lösen lässt.
Die Zeitersparnis ist enorm.

Prinzipiell bin ich jedoch immer noch Anfänger, was PB betrifft.

Nun zu meinem Problem.
Also ich bin gerade dabei, das CodeArchiv von PureArea.net per PBSourceConverter zu PB4 zu konvertieren bzw. ist bereits erledigt.
Nun habe ich alle, müssen so um die 1350 Dateien sein, konvertierten Codes in einem Verzeichnis liegen. Das Codearchiv ist halt in meinem PureBasic Pfad mit den entsprechenden Unterverzeichnissen entpackt.
Zuerst habe ich angefangen die konvertierten Sources "zu Fuss" in die entsprechenden Zielverzeichnisses zu kopieren. Da bin ich bald wahnsinnig geworden bei der enormen Anzahl der verschachtelten Unterverzeichnisse.
Also dachte ich mir, schreibe ich mir doch einfach ein Proggie, was die Arbeit für mich erledigt. Um das Rad nicht nochmals zu erfinden, stiess ich bei der Lösung des Problems auf die API SearchTreeforFile.

Der Code:

OpenConsole()

Procedure.s SucheDateiinPfad(NameDatei$)
If SearchTreeForFile_("c:\program files\PureBasic\Examples\CodeArchiv",NameDatei$,Treffer$)
ProcedureReturn Treffer$
Else
MessageRequester("Information", "Gesuchte Datei konnte nicht gefunden werden.")
EndIf
EndProcedure


If ExamineDirectory(0,"c:\data","*.*")
While NextDirectoryEntry(0)
If DirectoryEntryType(0) = #PB_DirectoryEntry_File
DateiName.s = DirectoryEntryName(0)
ZielPfad.s = SucheDateiinPfad(DateiName)
If ZielPfad <> ""
CopyFile("c:\data\" + DateiName, ZielPfad)
EndIf
EndIf
Wend
FinishDirectory(0)
EndIf
CloseConsole()
End

Ob ich die Console oder den MessageRequester in der Procedure überhaupt brauche, weiss ich gar nicht.
Wenn ich das Proggie mit Debugger kompiliere bekomme ich die Fehlermeldung: "Invalid memory access" bei der Zeile "If SearchTreeforFile...."
Ich vermute mal, dass ich die API falsch benutze.
Weiss jemand, wie es richtig geht? (Man lernt ja schliesslich nie aus)

Für konstruktive Kritik immer dankbar

Gruss Michael
Lieber unheimlich heimlich, als heimlich unheimlich
MichaelW
Beiträge: 2
Registriert: 06.08.2006 19:45
Wohnort: Paderborn

Beitrag von MichaelW »

Habe das Problem gefunden....

Die Variable Treffer$ in meiner Prozedur musste ich vorher noch dimensionieren mit Treffer$ = Space(1024)

So einfach kann es manchmal sein.
Lieber unheimlich heimlich, als heimlich unheimlich
Benutzeravatar
ts-soft
Beiträge: 22292
Registriert: 08.09.2004 00:57
Computerausstattung: Mainboard: MSI 970A-G43
CPU: AMD FX-6300 Six-Core Processor
GraKa: GeForce GTX 750 Ti, 2 GB
Memory: 16 GB DDR3-1600 - Dual Channel
Wohnort: Berlin

Beitrag von ts-soft »

War ich zu langsam :wink:
Damit Windows was in den OutPathBuffer schreiben kann, sollte man dort
erstmal Platz schaffen :mrgreen:
Wenn in der API-Hilfe [out] steht, bzw. wenn sie einen String in einem
Parameter zurückgibt, ist dies immer erforderlich.
PureBasic 5.73 LTS | SpiderBasic 2.30 | Windows 10 Pro (x64) | Linux Mint 20.1 (x64)
Nutella hat nur sehr wenig Vitamine. Deswegen muss man davon relativ viel essen.
Bild
Benutzeravatar
AND51
Beiträge: 5220
Registriert: 01.10.2005 13:15

Beitrag von AND51 »

Setz doch mal bei den Messagerequestern eine der #MB_* Konstanten (auch aus der API) ein. Diese findest du, wenn du nach der API Funktion MessageBox() suchst.

Hier sind einige:
#MB_ICONQUESTION
#MB_ICONERROR
#MB_ICONINFORMATION
#MB_ICONEXCLAMATION

und...? :wink:

SImpel, aber effektiv
PB 4.30

Code: Alles auswählen

Macro Happy
 ;-)
EndMacro

Happy End
Antworten