Linux Pendant zu GetModulename(HInstance)
-
- Beiträge: 9
- Registriert: Fr 26. Aug 2016, 16:28
- OS, Lazarus, FPC: Ubunntu 16.04 (L 1.6+dfsg-1 FPC 3.0.0)
- CPU-Target: 64Bit
Linux Pendant zu GetModulename(HInstance)
Hallo,
wie kann ich unter Linux kontrollieren, in welchem Kontext (Modul) der Code ausgeführt wird? Unter Windows ist die Kontrolle mittels GetModulename(HInstance) möglich. Für Linux fehlt mir das Pendant.
Besten Dank.
wie kann ich unter Linux kontrollieren, in welchem Kontext (Modul) der Code ausgeführt wird? Unter Windows ist die Kontrolle mittels GetModulename(HInstance) möglich. Für Linux fehlt mir das Pendant.
Besten Dank.
Re: Linux Pendant zu GetModulename(HInstance)
Was ist dein Ziel?
Die Frage ist nicht direkt Lazarus spezifisch, deshalb kann Google vielleicht helfen.
Z.B:
https://groups.google.com/forum/#!topic ... OaSzkQr52A
Siehe dort auch:
Die Frage ist nicht direkt Lazarus spezifisch, deshalb kann Google vielleicht helfen.
Z.B:
https://groups.google.com/forum/#!topic ... OaSzkQr52A
Siehe dort auch:
Für Konfigurationsdateien: http://lazarus-ccr.sourceforge.net/docs ... igdir.htmlIn my experience, MSWindows programmers who look for a function to obtain the full path of an executing process's executable are trying to solve the wrong problem...
-
- Beiträge: 1102
- Registriert: Di 5. Aug 2008, 09:37
- OS, Lazarus, FPC: Windows ,Linux,FreeBSD,Dos (L trunk FPC trunk)
- CPU-Target: 32/64,PPC(+64), ARM
- Wohnort: Eindhoven (Niederlande)
Re: Linux Pendant zu GetModulename(HInstance)
(die oberere Diskussion geht ganz vorbei um heraus zu finden in welchen Präfix man installiert ist. So das man zb /usr/local/etc finden kann )
-
- Lazarusforum e. V.
- Beiträge: 3177
- Registriert: Di 22. Jul 2008, 19:27
- OS, Lazarus, FPC: Lazarus: SVN; FPC: svn; Win 10/Linux/Raspbian/openSUSE
- CPU-Target: 32bit x86 armhf
- Wohnort: Köln
- Kontaktdaten:
Re: Linux Pendant zu GetModulename(HInstance)
Unter Linux ist es (soweit ich das korrekt interpretiere) üblich, den Installationspfad beim Kompilieren fest vorzugeben.marcov hat geschrieben:(die oberere Diskussion geht ganz vorbei um heraus zu finden in welchen Präfix man installiert ist. So das man zb /usr/local/etc finden kann )
Davon abgeleitet ist dann auch der globale Konfigurationspfad (/etc, /usr/local/etc).
Unter Free Pascal gibt es hierzu keine vordefinierte Möglichkeit; man könnte z.B. ein Compile-Time-Macro hierzu verwenden.
Das Programm sollte dann zur Laufzeit, die Variable SysUtils.SysConfigDir entsprechend dem globalen Konfigurationsverzeichnis setzen (per Standard /etc).
Damit greift dann auch die Funktion GetAppConfigDir auf das korrkte Verzeichnis zu.
MfG Socke
Ein Gedicht braucht keinen Reim//Ich pack’ hier trotzdem einen rein
Ein Gedicht braucht keinen Reim//Ich pack’ hier trotzdem einen rein
-
- Beiträge: 1102
- Registriert: Di 5. Aug 2008, 09:37
- OS, Lazarus, FPC: Windows ,Linux,FreeBSD,Dos (L trunk FPC trunk)
- CPU-Target: 32/64,PPC(+64), ARM
- Wohnort: Eindhoven (Niederlande)
Re: Linux Pendant zu GetModulename(HInstance)
Ich weiß was die Theorie ist. Das ist gerade das Problem, und ladet nicht wirklich ein etwas dynamisch damit um zu gehen. Und nicht alle Software ist auf jedes System neukompiliert.Socke hat geschrieben:Unter Linux ist es (soweit ich das korrekt interpretiere) üblich, den Installationspfad beim Kompilieren fest vorzugeben.marcov hat geschrieben:(die oberere Diskussion geht ganz vorbei um heraus zu finden in welchen Präfix man installiert ist. So das man zb /usr/local/etc finden kann )
Aber Linux natürlich hat nie ein Problem. Wenn es nicht funktioniert oder etwas nicht gibst ist da immer jemand der dich erklären will warum du das auch nicht wirklich brauchst, und das Linux "anders" ist.

-
- Beiträge: 9
- Registriert: Fr 26. Aug 2016, 16:28
- OS, Lazarus, FPC: Ubunntu 16.04 (L 1.6+dfsg-1 FPC 3.0.0)
- CPU-Target: 64Bit
Re: Linux Pendant zu GetModulename(HInstance)
theo hat geschrieben:Was ist dein Ziel?
- Um z.B. bei einer Fehlerausgabe zu melden, wie das Modul heißt, in dem der Fehler auftrat.
- Um mich selbst zu kontrollieren, in welchem Modul Speicher reserviert wurde und daher dort auch freigegeben werden muss.
-
- Beiträge: 130
- Registriert: Di 26. Jul 2011, 19:58
- OS, Lazarus, FPC: Deepin 20.2; Lazarus 2.0.0 + dfsg-2
- CPU-Target: 64Bit
Re: Linux Pendant zu GetModulename(HInstance)
Hallo,
unter Linux verwende ich auf dem Raspberry :
Du erhältst den vollständigen Pfad mit Programmname.
In dem Fall interessiert mich der Programmpfad, um in Unterpfaden andere Dateien zu öffnen oder abzulegen.
PC +1 enthält den Namen der Anwendung.
MfG
Aro
unter Linux verwende ich auf dem Raspberry :
Code: Alles auswählen
procedure SetProPfad;
Var PC : PChar;
ss : Array [0..255] of Char;
begin
SS := Paramstr(0); //Application.ExeName;
PC := StrRScan(ss, '/');
if PC <> Nil then begin
PC[1] := #0;
end;
ProPfad := StrNew(ss);
In dem Fall interessiert mich der Programmpfad, um in Unterpfaden andere Dateien zu öffnen oder abzulegen.
PC +1 enthält den Namen der Anwendung.
MfG
Aro
Zuletzt geändert von Lori am Mi 16. Nov 2016, 18:41, insgesamt 1-mal geändert.
Grund: Highlighter
Grund: Highlighter
-
- Beiträge: 6900
- Registriert: Do 2. Jan 2014, 17:21
- OS, Lazarus, FPC: Linux (die neusten Trunk)
- CPU-Target: 64Bit
- Wohnort: Schweiz
Re: Linux Pendant zu GetModulename(HInstance)
@aro
Wieso so kompliziert ?
http://www.freepascal.org/docs-html/rtl ... tines.html
Wieso so kompliziert ?
Code: Alles auswählen
var
s: string;
begin
s := ParamStr(0);
ShowMessage(ExtractFileDir(s) + LineEnding + LineEnding + ExtractFileName(s));
Mit Lazarus sehe ich grün
Mit Java und C/C++ sehe ich rot
Mit Java und C/C++ sehe ich rot
-
- Beiträge: 130
- Registriert: Di 26. Jul 2011, 19:58
- OS, Lazarus, FPC: Deepin 20.2; Lazarus 2.0.0 + dfsg-2
- CPU-Target: 64Bit
Re: Linux Pendant zu GetModulename(HInstance)
Hallo,
ich programmiere sehr große und sehr komplexe Projekte und da kommt es sehr auf schnelle Ausführungszeiten an. Kurze Quelltexte mit kompakten Funktionen sind schnell geschrieben aber brauchen oft sehr viel Zeit bei der Ausführung selbst.
Deshalb verwende ich auch grundsätzlich nullterminierte Zeichenketten und keine Strings.
Bei Lazarus ist das besonders schlimm, weil der Quelltext für mehrere Betriebssysteme ausführbar sein muß. Eine Funktion ist da sicher nur eine vernachlässigbare Zeitverschwendung, aber diese Sünden addieren sich gewaltig.
Es ist leider mode geworden, einfachen Programmierstiel mit schnellerer Rechentechnik zu kompensieren.
Es soll jeder selbst entscheiden, ob es für ihn besser ist das Programm schnell zu schreiben oder schnell auszuführen.
MfG
Aro
ich programmiere sehr große und sehr komplexe Projekte und da kommt es sehr auf schnelle Ausführungszeiten an. Kurze Quelltexte mit kompakten Funktionen sind schnell geschrieben aber brauchen oft sehr viel Zeit bei der Ausführung selbst.
Deshalb verwende ich auch grundsätzlich nullterminierte Zeichenketten und keine Strings.
Bei Lazarus ist das besonders schlimm, weil der Quelltext für mehrere Betriebssysteme ausführbar sein muß. Eine Funktion ist da sicher nur eine vernachlässigbare Zeitverschwendung, aber diese Sünden addieren sich gewaltig.
Es ist leider mode geworden, einfachen Programmierstiel mit schnellerer Rechentechnik zu kompensieren.
Es soll jeder selbst entscheiden, ob es für ihn besser ist das Programm schnell zu schreiben oder schnell auszuführen.
MfG
Aro
-
- Beiträge: 6900
- Registriert: Do 2. Jan 2014, 17:21
- OS, Lazarus, FPC: Linux (die neusten Trunk)
- CPU-Target: 64Bit
- Wohnort: Schweiz
Re: Linux Pendant zu GetModulename(HInstance)
Dies kommt immer auf die Situation an, wen man etwas zeitkritisches in einer Schleife hat, da lohnt es sich jedes Byte zu optimieren, aber Sachen, die nur gelegentlich aufgerufen werden, da bringt es nicht viel. Sonst könnte man das ganze Programm in Assembler schreiben.ich programmiere sehr große und sehr komplexe Projekte und da kommt es sehr auf schnelle Ausführungszeiten an. Kurze Quelltexte mit kompakten Funktionen sind schnell geschrieben aber brauchen oft sehr viel Zeit bei der Ausführung selbst.
Mit Lazarus sehe ich grün
Mit Java und C/C++ sehe ich rot
Mit Java und C/C++ sehe ich rot
-
- Beiträge: 1102
- Registriert: Di 5. Aug 2008, 09:37
- OS, Lazarus, FPC: Windows ,Linux,FreeBSD,Dos (L trunk FPC trunk)
- CPU-Target: 32/64,PPC(+64), ARM
- Wohnort: Eindhoven (Niederlande)
Re: Linux Pendant zu GetModulename(HInstance)
Null terminierte Strings sinds langsamer als Längepräfixed Strings. (logisch, weil zehn * eine Integer Länge up to date halten (~O(1) billiger ist als nur ein Mahl strlen()) (~O(n))aro hat geschrieben: Deshalb verwende ich auch grundsätzlich nullterminierte Zeichenketten und keine Strings.
Also nie Null terminated Strings wenn mann Performance braucht. Das ist nur altmodisch C, und dient kein realistischer Zweck
Schlimmsten Fall verzichten auf Automation und rein manuell verarbeitete Längepräfixed Strings nutzen.
Aber Nullterminated Strings verarbeiten aus Performanceblickpunkt ist quatsch
Siehe auch zb mein post auf SO
-
- Lazarusforum e. V.
- Beiträge: 3177
- Registriert: Di 22. Jul 2008, 19:27
- OS, Lazarus, FPC: Lazarus: SVN; FPC: svn; Win 10/Linux/Raspbian/openSUSE
- CPU-Target: 32bit x86 armhf
- Wohnort: Köln
- Kontaktdaten:
Re: Linux Pendant zu GetModulename(HInstance)
Die impliziten try..finally-Blöcke bei Verwendung von managed Data Types (String, referenzgezählte Interfaces, dynamische Arrays) nicht einen wesentlich höheren Anteil an der Laufzeit?marcov hat geschrieben:Aber Nullterminated Strings verarbeiten aus Performanceblickpunkt ist quatsch
MfG Socke
Ein Gedicht braucht keinen Reim//Ich pack’ hier trotzdem einen rein
Ein Gedicht braucht keinen Reim//Ich pack’ hier trotzdem einen rein
-
- Beiträge: 1102
- Registriert: Di 5. Aug 2008, 09:37
- OS, Lazarus, FPC: Windows ,Linux,FreeBSD,Dos (L trunk FPC trunk)
- CPU-Target: 32/64,PPC(+64), ARM
- Wohnort: Eindhoven (Niederlande)
Re: Linux Pendant zu GetModulename(HInstance)
Gegen manueller Null-terminated (NT) Strings, ohne Optimierung (siehe unter) sicher.Socke hat geschrieben:Die impliziten try..finally-Blöcke bei Verwendung von managed Data Types (String, referenzgezählte Interfaces, dynamische Arrays) nicht einen wesentlich höheren Anteil an der Laufzeit?marcov hat geschrieben:Aber Nullterminated Strings verarbeiten aus Performanceblickpunkt ist quatsch
Gegen automatisch Managed NT oder generierter NT Kode: nicht immer. Wenn strlen() zu viel wird angerufen ... Speziell im neueren Code mit im Durchschnitt kürzeren Prozeduren (lese in nicht antike Stilen wie zb OO), wird die Länge häufiger neu geladen und ist NT eben schlimmer. (mehr O(n) Operationen).
Auch kann man mit {$Implicitexceptions} die schlimmste Engpässen optimieren und oft noch sehr nah dran kommen mit erheblich weniger Mühe, oder mit pointer arbeiten.
Aber das war nicht der Kern meiner Bemerkung, sonst dies: wenn es schlimm genug ist das man überwiegt manueller Stringkode zu schreiben , soll man auch keine Kompromisen schliessen und für die mehr Performancestarken Technologie (also Längepräfixed, LP) wählen.
Es gibt nur NT primitieve in FPC für C Interfacing, die sind nicht für neuen Kode.
Den alte Ruf das NT schneller ist, ist teilweise mit nicht Optimierende Kompiler (und die falsche Annahme das LP Runtimes nicht auch pointers nutzen), teilweise ein Artefakt von die originelle Unix Architektur, PDP 9 und 11, die pre und postincrement additionel in manche Instruktionen kodieren konnten. Also da war ++ und -- im Kombination mit * (oder p^ in Pascal) billiger.
Heute wurden in solchen Fall aber Optimierende Kompiler solche Kode in viel mehr Falle automatisch erzeugen können.
-
- Beiträge: 130
- Registriert: Di 26. Jul 2011, 19:58
- OS, Lazarus, FPC: Deepin 20.2; Lazarus 2.0.0 + dfsg-2
- CPU-Target: 64Bit
Re: Linux Pendant zu GetModulename(HInstance)
Man kann von Strings halten was man will. Letztendlich muß jeder mit seinem Programmierstiel glücklich werden. Fakt ist, das Windows überhaupt keine Strings kennt und jegliche Textübergaben an eine Windows -Api als nullterminierte Zeichenkette erfolgen muß ! Und selbst wenn die Programiersprache für solche Funktionen Strings vorsieht, dann muß der Kompiler im Hintergrund erst den String eine nullterminierte Zeichenkette umwandeln! Und wenn man Texte abfragt, dann liefert das Betriebssystem die ebenfalls nur eine nullterminierte Zeichenkette und die Programmiersprache wandelt diese im Hintergrund erst in einen String um. Bei Linux sieht es nicht anders aus. Das umwandeln kostet mehr Zeit, als wenn man das Format benutzt, was letztendlich übergeben wird. Bei dynamisch angelegten Strings wird bei jeder Aktion die neue Länge errechnet und angepasst. Wenn ein paar Zeichen angehängt werden und der Platz des reservierten Speichers an der Positon nicht erweitert werden kann, dann muß neuer Speicher reserviert werden, der String wird dann in den neuen Bereich kopiert und der alte Bereich freigegeben. Was soll daran schneller gehen als einen fest reservierten Speicher zu benutzen ????