Kommandozeile / DLLs einbinden

Für allgemeine Fragen zur Programmierung mit PureBasic.
Benutzeravatar
EgonEprom
Beiträge: 24
Registriert: 15.02.2010 18:18
Computerausstattung: Windows2000-XP-Vista-7
Wohnort: Saarwellingen

Kommandozeile / DLLs einbinden

Beitrag von EgonEprom »

Hallo allemiteinander

hab mal wieder 2 Fragen, zu denen ich im Handbuch keine Hilfe finde:

1. Wie komme ich an den vollständigen Kommandozeilen-String: gibt es da
a) ein Hintertürchen oder
b) muß ich für alle i% = 0 to CountProgramParameters() die ProgramParameter(i%) zusammenfassen - und welche Zeichen gehen dabei verloren ?

2. Kann ich eine DLL in mein *.EXE einbinden und von "intern" laden - ähnlich die *.WAV-Datei, die mittels
label: IncludeBinary "datei.WAV"eingebunden wird und dann zur Laufzeit per CatchSound(#num,?label)
geladen wird und nicht mehr als externe Datei existieren muß (wäre wohl praktisch, wenn das Programm immer seine DLL dabei hat - und zwar die richtige...)

danke vorab & mfg

EgonEprom
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: Kommandozeile / DLLs einbinden

Beitrag von ts-soft »

Zu 1: Alternativ die API nehmen, wenn Du es lieber unbequem möchtest :wink:
Unter Windows wäre das: http://msdn.microsoft.com/en-us/library ... 85%29.aspx
oder Dein Hintertürchen, wobei sich mir der Sinn nicht erschließen will.

Zu 2: Wird nicht unterstützt. Es gibts einen C-Code von Joachim Bauch für 32-Bit Windows,
den zur lib kompilieren (mit PellesC z.B.) und in PB importieren oder testen ob die entsprechende Lib in PBOSL
(LoadDLLFromMemory o. ä.)noch funktioniert.

Gruß
Thomas
c4s
Beiträge: 1235
Registriert: 19.09.2007 22:18

Re: Kommandozeile / DLLs einbinden

Beitrag von c4s »

So ist es eventuell etwas schlanker:

Code: Alles auswählen

Repeat
	Parameter.s = ProgramParameter()
	Select Parameter
		;[...]
	EndSelect
Until Len(Parameter) = 0
"Menschenskinder, das Niveau dieses Forums singt schon wieder!" — GronkhLP ||| "ich hogffe ihr könnt den fehle endecken" — Marvin133 ||| "Ideoten gibts ..." — computerfreak ||| "Jup, danke. Gruss" — funkheld
sverson
Beiträge: 19
Registriert: 06.02.2005 01:42
Wohnort: Deutschland

Re: Kommandozeile / DLLs einbinden

Beitrag von sverson »

EgonEprom hat geschrieben:1. Wie komme ich an den vollständigen Kommandozeilen-String:
Ich würde das so machen:

Code: Alles auswählen

Procedure.s ProgramParameters()
  Protected ProgramParameter$, ProgramParameters$ = ""
  ProgramParameter$ = ProgramParameter()
  While ProgramParameter$<>""
    ProgramParameters$ + ProgramParameter$ + " "
    ProgramParameter$ = ProgramParameter() 
  Wend
  ProcedureReturn RTrim(ProgramParameters$)
EndProcedure

Debug ">"+ProgramParameters()+"<"
:wink: Sven
PB 6.10 LTS (x64) - Win10/11
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: Kommandozeile / DLLs einbinden

Beitrag von ts-soft »

In diesem Falle ist eine fußgesteuerte Schleife aber günstiger :wink:
Habs mal angepaßt, desweiteren hab ich ein LCase() hinzugefügt, da
die Auswertung von KommandZeilenparameter im allg. ja CaseInsensitive
gemacht wird.

Code: Alles auswählen

Procedure.s ProgramParameters()
  Protected ProgramParameter$, ProgramParameters$ = ""

  Repeat
    ProgramParameter$ = ProgramParameter()
    ProgramParameters$ + ProgramParameter$ + " "
  Until ProgramParameter$ = ""
  
  ProcedureReturn LCase(RTrim(ProgramParameters$))
EndProcedure

Debug ">" + ProgramParameters() + "<" 
Aber der Sinn des Zusammenfügens entzieht sich mir immer noch.
Weil am prakt. ist doch die Auswertung wie in c4s seinem Beispiel.

Gruß
Thomas
sverson
Beiträge: 19
Registriert: 06.02.2005 01:42
Wohnort: Deutschland

Re: Kommandozeile / DLLs einbinden

Beitrag von sverson »

...In diesem Falle ist eine fußgesteuerte Schleife aber günstiger...

Klar! - Ich war ein bisschen zu schnell mit tippen und wegschicken :oops:

Das LCase() hatte ich allerdings absichtlich weggelassen, da ich es so verstanden hatte, dass EgonEprom den kompletten (unveränderten) Kommandozeilen-String haben möchte. Er hatte ja gefragt, welche Zeichen verloren gehen. ;-)

Gruß
Sven
PB 6.10 LTS (x64) - Win10/11
Benutzeravatar
_JON_
Beiträge: 389
Registriert: 30.03.2010 15:24

Re: Kommandozeile / DLLs einbinden

Beitrag von _JON_ »

Hallo,

ist es auch möglich die komplette Kommandozeile exakt zu erhalten (ohne %0) ?

In der vorherigen Beispielen gibt es Probleme mit Ausführungszeichen, diese werden entfernt.

Gruß
Jon
PureBasic 5.46 LTS (Windows x86/x64) | windows 10 x64 Oktober failure
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: Kommandozeile / DLLs einbinden

Beitrag von ts-soft »

_JON_ hat geschrieben:Hallo,

ist es auch möglich die komplette Kommandozeile exakt zu erhalten (ohne %0) ?

In der vorherigen Beispielen gibt es Probleme mit Ausführungszeichen, diese werden entfernt.

Gruß
Jon
Hab zwar bereits auf die API hingewiesen, aber hier nochmals in klarschrift :wink:

Code: Alles auswählen

Debug PeekS(GetCommandLine_())
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: 8807
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: Kommandozeile / DLLs einbinden

Beitrag von NicTheQuick »

Zudem ist Kleinschrift schlecht für Dateinamen, die nur unter Windows caseinsensitive sind.
Benutzeravatar
_JON_
Beiträge: 389
Registriert: 30.03.2010 15:24

Re: Kommandozeile / DLLs einbinden

Beitrag von _JON_ »

Danke für die schnelle Antwort :allright:

Code: Alles auswählen

Debug PeekS(GetCommandLine_())
Leider stehen API in der DEMO Version nicht zur Verfügung und Ich wollte erstmal reinschnuppert.
PureBasic 5.46 LTS (Windows x86/x64) | windows 10 x64 Oktober failure
Antworten