Problem mit WritestringN

Anfängerfragen zum Programmieren mit PureBasic.
Benutzeravatar
N_Gnom
Beiträge: 149
Registriert: 11.09.2013 19:52

Problem mit WritestringN

Beitrag von N_Gnom »

Könnte mir jemand bei folgendem code helfen?
Ich bin heut wohl sonntagsblind...
Ist eben nicht mehr aktuell der code und vielleicht gibts auch nen besseren, aber ich hadere mit writestringn rum.
Hab es versucht anzupassen, dass ein string in eine datei geschrieben wird, aber irgendwie scheint es nicht zu klappen.
Das hier ist der originalcode.

Code: Alles auswählen

; German forum: http://robsite.de/php/pureboard/viewtopic.php?t=3216&highlight=
; Author: Mischa
; Date: 22. December 2003


; Automatically creates an include file for standard dll in the same path,
; which includes the definitions of their functions...

; Einleitung:
; Das kleine Ding erstellt für Standard Dlls im gleichen Pfad eine 
; fertige Include-Datei mit den Definitionen ihrer Funktionen, zwecks 
; Nutzung mit CallFunctionFast(). 


;Include Generator 
;Mischa Brandt 


;Beispiel 'fmod.dll' 
;Folgende Filter/Schnittmuster passend für die fmod.dll 
;(Include gibt's schon, weiß ich. Ist nur zur Demonstration.) 
leftcut     = 1    
rightcut    = 0 
separator.s = "@" 

lib.s = "fmod.dll" ;<-Pfad anpassen 


;lib.s=ProgramParameter() ;<- executable erstellen und einfach Dll droppen. 
;leftcut     = 0          
;rightcut    = 0 
;separator.s = "" 

q.s=Chr(34):f1.s="DLLEntryPoint":f2.s="AttachProcess" 
f3.s="DetachProcess":f4.s="AttachThread":f5.s="DetachThread" 
If OpenLibrary(0,lib) 
  If ExamineLibraryFunctions(0) 
    If CreateFile(0,GetPathPart(lib)+"Include_"+ReplaceString(GetFilePart(lib),GetExtensionPart(lib),"pb")) 
      WriteStringN("Procedure Init"+Left(GetFilePart(lib),Len(GetFilePart(lib))-4)+"(libid,libname.s)") 
      WriteStringN("  If OpenLibrary(libid,libname)") 
      While NextLibraryFunction() 
        n.s  = LibraryFunctionName() 
        nn.s = StringField(Mid(n,leftcut+1,Len(n)-leftcut-rightcut),1,separator) 
        If n<>f1 And n<>f2 And n<>f3 And n<>f4 And n<>f5 
          WriteStringN("    Global *"+nn) 
          WriteStringN("    *"+nn+"=IsFunction(libid,"+q+n+q+")") 
        EndIf 
      Wend 
      WriteStringN("  Else") 
      WriteStringN("    MessageRequester("+q+"error!"+q+","+q+"Can't open library!"+q+",0)")  
      WriteStringN("  Endif") 
      WriteStringN("EndProcedure") 
      CloseFile(0) 
    Else 
      MessageRequester("Error!","Can't create include file",0) 
    EndIf 
  Else 
    CloseLibrary(0) 
    MessageRequester("Error!","Can't examine library!",0) 
  EndIf 
  CloseLibrary(0) 
Else 
  MessageRequester("Error!","Can't open library!",0) 
EndIf 

; ExecutableFormat=
; FirstLine=1
; EOF
Laptop: Win10@64bit - i3 2x2Ghz - 8GB Ram - 1TB HDD
Desktop: Win10@64bit - AMD Ryzen 5 2400G - MSI B450 Tomahawk - 8GB Ram - 240GB SSD
Benutzeravatar
NicTheQuick
Ein Admin
Beiträge: 8809
Registriert: 29.08.2004 20:20
Computerausstattung: Ryzen 7 5800X, 64 GB DDR4-3200
Ubuntu 24.04.2 LTS
GeForce RTX 3080 Ti
Wohnort: Saarbrücken

Re: Problem mit WritestringN

Beitrag von NicTheQuick »

Vielleicht solltest du auch als ersten Parameter von 'WriteStringN()' auch die Datei-ID angeben.
Benutzeravatar
N_Gnom
Beiträge: 149
Registriert: 11.09.2013 19:52

Re: Problem mit WritestringN

Beitrag von N_Gnom »

Hab es inzwischen gelöst, hatte mich nur vertippt.
Laptop: Win10@64bit - i3 2x2Ghz - 8GB Ram - 1TB HDD
Desktop: Win10@64bit - AMD Ryzen 5 2400G - MSI B450 Tomahawk - 8GB Ram - 240GB SSD
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

Re: Problem mit WritestringN

Beitrag von ts-soft »

Ansonsten besser ein etwas neueres Tool nutzen, das kein CallFunction mehr nutzt :mrgreen:
http://www.realsource.de/downloads/doc_ ... edllhelper

Grabt euch immer den alten nicht mehr funktionierenden Kram aus.

Gruß
Thomas
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
GronkhLP
Beiträge: 72
Registriert: 14.11.2013 22:43
Wohnort: Köln
Kontaktdaten:

Re: Problem mit WritestringN

Beitrag von GronkhLP »

@ts-soft: Dein Tool generiert im zweiten Tab den Importcode. Kannst du auch Parameter aus DLL auslesen und generieren? :)
Bild
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

Re: Problem mit WritestringN

Beitrag von ts-soft »

Anzahl Parameter wird bei vielen StdCall DLLs erkannt (nicht immer), bei CDECL kann das aber
nicht gehen, und den Typ des Parameters kann man immer nur der Dokumentation entnehmen,
der steht nicht in der DLL (Ausnahme bei manchen COM-DLLs, die von meinem Tool aber sowieso
nicht unterstützt werden).

Gruß
Thomas
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
NicTheQuick
Ein Admin
Beiträge: 8809
Registriert: 29.08.2004 20:20
Computerausstattung: Ryzen 7 5800X, 64 GB DDR4-3200
Ubuntu 24.04.2 LTS
GeForce RTX 3080 Ti
Wohnort: Saarbrücken

Re: Problem mit WritestringN

Beitrag von NicTheQuick »

In DLLs stehen keine Informationen mehr über Parameter drin, deswegen kann man die auch nicht auslesen. Man kann auslesen wie die exportierten Funktionsnamen heißen, weil diese so ja auch angesprochen werden müssen, aber dann weiß man nur noch wie viele Bytes die Funktion als Parameter braucht. Dabei können 8 Byte entweder für zwei Longs stehen, oder für einen Pointer. Das weiß man aber nur, wenn man entweder den Originalquellcode der DLL kennt oder z.B. eine passende C-Headerdatei dazu findet bzw. wenn man eben einfach eine Hilfe dazu hat.
GronkhLP
Beiträge: 72
Registriert: 14.11.2013 22:43
Wohnort: Köln
Kontaktdaten:

Re: Problem mit WritestringN

Beitrag von GronkhLP »

Danke für eure Antworten! Die Microsoft Dokumentation kann man glaube ich herunterladen oder? Sind da auch Headerdateien enthalten? Wenn ja dann kann man doch ein Tool schreiben, um die Importe mit Parametern nach PB zu konvertieren wenn ich mit meiner Annahme richtig liege oder? :)
Bild
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

Re: Problem mit WritestringN

Beitrag von ts-soft »

@GronkhLP

Dann hau mal rein, ich bin bereits 54 und kann deshalb nicht ewig warten :bounce:
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
TroaX
Beiträge: 684
Registriert: 08.03.2013 14:27
Computerausstattung: PC: Ryzen 9 3950X, 96 GB RAM, RX6800XT, 2.5 TB SSD, 21:9 Display, Linux Mint | Lappi: Ryzen 7 5800H, 16 GB RAM, 1 TB SSD, Linux Mint
Wohnort: NRW
Kontaktdaten:

Re: Problem mit WritestringN

Beitrag von TroaX »

[OFFTOPIC]Was auch mal nicht schlecht wäre ist ein aktueller Header-Konverter, der auch Makros in den Headern erkennt (also am besten alle möglichen C-Header Informationen) ;-) Würde vieles ersparen. Denn der PB eigene stößt da schnell an seine Grenzen ;-)[/OFFTOPIC]
PC: Ryzen 9 3950X | 96 GB RAM | RX6800XT | 2,5 TB NVMe | Linux Mint
Notebook: 16" 3:2 | Ryzen 7 5800H | 16 GB RAM | Radeon Vega | 1TB NVMe | Linux Mint
NAS: Fritz.Box 5690 Pro (Nur für Keepass-DB)
Coding: Purebasic, Spiderbasic, GDevelop, Javascript/Node
Antworten