Seite 1 von 2

Kommandozeile / DLLs einbinden

Verfasst: 10.03.2010 00:21
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

Re: Kommandozeile / DLLs einbinden

Verfasst: 10.03.2010 02:03
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

Re: Kommandozeile / DLLs einbinden

Verfasst: 10.03.2010 02:28
von c4s
So ist es eventuell etwas schlanker:

Code: Alles auswählen

Repeat
	Parameter.s = ProgramParameter()
	Select Parameter
		;[...]
	EndSelect
Until Len(Parameter) = 0

Re: Kommandozeile / DLLs einbinden

Verfasst: 10.03.2010 19:11
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

Re: Kommandozeile / DLLs einbinden

Verfasst: 10.03.2010 19:23
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

Re: Kommandozeile / DLLs einbinden

Verfasst: 10.03.2010 21:10
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

Re: Kommandozeile / DLLs einbinden

Verfasst: 30.03.2010 15:31
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

Re: Kommandozeile / DLLs einbinden

Verfasst: 30.03.2010 15:54
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_())

Re: Kommandozeile / DLLs einbinden

Verfasst: 30.03.2010 16:09
von NicTheQuick
Zudem ist Kleinschrift schlecht für Dateinamen, die nur unter Windows caseinsensitive sind.

Re: Kommandozeile / DLLs einbinden

Verfasst: 30.03.2010 16:10
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.