#pragma abfragen

Alle Fragen um die Programmierung, die sich sonst nicht kategorisieren lassen. Von Makro bis Codeblock, von IF bis ENDIF

Moderator: Moderatoren

Antworten
Benutzeravatar
Jan
Marvin
Marvin
Beiträge: 13918
Registriert: Fr, 23. Sep 2005 18:23
Wohnort: 49328 Melle
Hat sich bedankt: 4 Mal
Danksagung erhalten: 7 Mal
Kontaktdaten:

#pragma abfragen

Beitrag von Jan » Mi, 07. Okt 2020 15:34

Hallo,

im Moment teste ich mit einer neuen externen Bibliothek, die wir zur Zeit noch in der Vorversion nutzen. Und je nachdem welche der beiden Versionen in per #pragma library einbinde müssen verschiedene andere Werte gesetzt werden.

Jetzt könnte ich mir natürlich eine Variable setzen, die beides parallel setzt. Aber gibt es nicht vielleicht die Möglichkeit abzufragen, welche der beiden dll ich eingebunden habe?

Jan
Mitglied der XUG Osnabrück
Mitglied der XUG Berlin/Brandenburg
Mitglied des Deutschsprachige Xbase-Entwickler e. V.

Benutzeravatar
Tom
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 8197
Registriert: Do, 22. Sep 2005 23:11
Wohnort: Berlin
Hat sich bedankt: 7 Mal
Danksagung erhalten: 28 Mal
Kontaktdaten:

Re: #pragma abfragen

Beitrag von Tom » Mi, 07. Okt 2020 15:47

Du könntest parallel eine Konstante setzen, die im Code vorkommt:

Code: Alles auswählen

#pragma library("meinelib_version31.lib")
#define MEINELIB 31
oder

Code: Alles auswählen

#pragma library("meinelib_version33.lib")
#define MEINELIB 33
Im Code:

Code: Alles auswählen

IF MEINELIB = 31 // das wäre dann nach dem PP "IF 31 = 33" oder "IF 33 = 33"
Eine wirklich gute 3rd-Party-Lib enthält aber eine Versionsfunktion, das macht dann alles einfacher.
Herzlich,
Tom

Benutzeravatar
Jan
Marvin
Marvin
Beiträge: 13918
Registriert: Fr, 23. Sep 2005 18:23
Wohnort: 49328 Melle
Hat sich bedankt: 4 Mal
Danksagung erhalten: 7 Mal
Kontaktdaten:

Re: #pragma abfragen

Beitrag von Jan » Mi, 07. Okt 2020 15:55

Hallo Tom,

etwas anders als ich das mit der Abfrage gedacht hatte. Aber auch nicht das was ich suche. Ich dachte da eher an etwas wie: "Ist die meinedll12.dll oder die meinedll13.dll eingebunden?":

Das ist natürlich nur eine rein akademische Frage. Es gibt mindestens drei Wege, das anders zu regeln - einen davon hast Du ja aufgezeigt. Würde mich aber einfach mal interessieren ob so was nicht doch geht.

Das mit der Versionsabfrage mache ich übrigens an anderer Stelle auch. Bei der Abfrage ob es Updates gibt. Aber da gehe ich dann halt wirklich auf die interne Version der dll. Hier aber geht es um komplett andere Dateinamen.

Jan
Mitglied der XUG Osnabrück
Mitglied der XUG Berlin/Brandenburg
Mitglied des Deutschsprachige Xbase-Entwickler e. V.

Benutzeravatar
Marcus Herz
Rekursionen-Architekt
Rekursionen-Architekt
Beiträge: 221
Registriert: Mo, 16. Jan 2006 8:13
Wohnort: Allgäu
Hat sich bedankt: 1 Mal
Danksagung erhalten: 12 Mal
Kontaktdaten:

Re: #pragma abfragen

Beitrag von Marcus Herz » Mi, 07. Okt 2020 16:01

auch eine Möglichkeit, vor allem wenn es neue Funktionen gibt:
#IF MENIEVARIALBE = 23
#ELSE
#IF MENIEVARIALBE = 25

#ENDIF
#ENDIF
oder im project einen Compilerschalter setzen
COMPILE_FLAGS = /w /wi /wl /wu /b /q /dMEINEVARIABLE=25
Gruß Marcus

Es gibt keine Grenzen, aber du kannst welche ziehen.

Benutzeravatar
Jan
Marvin
Marvin
Beiträge: 13918
Registriert: Fr, 23. Sep 2005 18:23
Wohnort: 49328 Melle
Hat sich bedankt: 4 Mal
Danksagung erhalten: 7 Mal
Kontaktdaten:

Re: #pragma abfragen

Beitrag von Jan » Mi, 07. Okt 2020 16:04

Marcus,

das wäre Variante 2. Die ich im Kopf hatte.

Aber wie gesagt: Ich würde einfach nur gerne wissen, ob man über den Dateinamen abfragen kann, ob diese dll eingebunden worden ist.

Jan
Mitglied der XUG Osnabrück
Mitglied der XUG Berlin/Brandenburg
Mitglied des Deutschsprachige Xbase-Entwickler e. V.

Benutzeravatar
Marcus Herz
Rekursionen-Architekt
Rekursionen-Architekt
Beiträge: 221
Registriert: Mo, 16. Jan 2006 8:13
Wohnort: Allgäu
Hat sich bedankt: 1 Mal
Danksagung erhalten: 12 Mal
Kontaktdaten:

Re: #pragma abfragen

Beitrag von Marcus Herz » Mi, 07. Okt 2020 16:08

aDll := dllInfo(, DLL_INFO_LIST)
gibt alle geladenen DLL zurück
Gruß Marcus

Es gibt keine Grenzen, aber du kannst welche ziehen.

Benutzeravatar
Marcus Herz
Rekursionen-Architekt
Rekursionen-Architekt
Beiträge: 221
Registriert: Mo, 16. Jan 2006 8:13
Wohnort: Allgäu
Hat sich bedankt: 1 Mal
Danksagung erhalten: 12 Mal
Kontaktdaten:

Re: #pragma abfragen

Beitrag von Marcus Herz » Mi, 07. Okt 2020 16:09

was war denn Variante 3?
Gruß Marcus

Es gibt keine Grenzen, aber du kannst welche ziehen.

Benutzeravatar
Jan
Marvin
Marvin
Beiträge: 13918
Registriert: Fr, 23. Sep 2005 18:23
Wohnort: 49328 Melle
Hat sich bedankt: 4 Mal
Danksagung erhalten: 7 Mal
Kontaktdaten:

Re: #pragma abfragen

Beitrag von Jan » Mi, 07. Okt 2020 16:10

Marcus,

Variante 3 wäre, das ich per IF File() nach dem Dateinamen frage.

Aber es gibt bestimmt auch noch Varianten 4 und 5 und ...

Jan
Mitglied der XUG Osnabrück
Mitglied der XUG Berlin/Brandenburg
Mitglied des Deutschsprachige Xbase-Entwickler e. V.

Benutzeravatar
Tom
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 8197
Registriert: Do, 22. Sep 2005 23:11
Wohnort: Berlin
Hat sich bedankt: 7 Mal
Danksagung erhalten: 28 Mal
Kontaktdaten:

Re: #pragma abfragen

Beitrag von Tom » Mi, 07. Okt 2020 16:19

@Marcus:
aDll := dllInfo(, DLL_INFO_LIST)
gibt alle geladenen DLL zurück
Ja, aber nur die Handles, keine Dateinamen. Man muss dann für jeden Eintrag aus dieser Liste mit

Code: Alles auswählen

DllInfo(<nHandle>,DLL_INFO_NAME)
den Namen abfragen.
Zuletzt geändert von Tom am Mi, 07. Okt 2020 16:37, insgesamt 1-mal geändert.
Herzlich,
Tom

Benutzeravatar
Tom
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 8197
Registriert: Do, 22. Sep 2005 23:11
Wohnort: Berlin
Hat sich bedankt: 7 Mal
Danksagung erhalten: 28 Mal
Kontaktdaten:

Re: #pragma abfragen

Beitrag von Tom » Mi, 07. Okt 2020 16:21

Code: Alles auswählen

FUNCTION IsDllLoadedByName(c)
LOCAL aList := DllInfo(,DLL_INFO_LIST), nCtr := Len(aList), n
FOR n := 1 TO nCtr
  IF Upper(DllInfo(aList[n],DLL_INFO_NAME)) == Upper(c)
    RETURN .T.
  ENDIF
NEXT
RETURN .F.

Usage: ? IsDllLoadedByName('meinedll31.dll')
Herzlich,
Tom

Benutzeravatar
Jan
Marvin
Marvin
Beiträge: 13918
Registriert: Fr, 23. Sep 2005 18:23
Wohnort: 49328 Melle
Hat sich bedankt: 4 Mal
Danksagung erhalten: 7 Mal
Kontaktdaten:

Re: #pragma abfragen

Beitrag von Jan » Mi, 07. Okt 2020 16:23

Hallo Tom,

Danke für die Mühe, das Sample zusammen zu stellen. Macht genau das was ich gedacht hatte. Ich hatte nur gehofft daß das mit einer mir nicht in den Sinn kommenden Xbase++-Funktion direkt klappen könnte.

Jan
Mitglied der XUG Osnabrück
Mitglied der XUG Berlin/Brandenburg
Mitglied des Deutschsprachige Xbase-Entwickler e. V.

Benutzeravatar
Tom
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 8197
Registriert: Do, 22. Sep 2005 23:11
Wohnort: Berlin
Hat sich bedankt: 7 Mal
Danksagung erhalten: 28 Mal
Kontaktdaten:

Re: #pragma abfragen

Beitrag von Tom » Mi, 07. Okt 2020 16:37

Gerne. Aber Marcus hatte den Impuls gegeben.
Herzlich,
Tom

Benutzeravatar
Marcus Herz
Rekursionen-Architekt
Rekursionen-Architekt
Beiträge: 221
Registriert: Mo, 16. Jan 2006 8:13
Wohnort: Allgäu
Hat sich bedankt: 1 Mal
Danksagung erhalten: 12 Mal
Kontaktdaten:

Re: #pragma abfragen

Beitrag von Marcus Herz » Mi, 07. Okt 2020 17:04

Ich wollte Jan auch noch ein bisschen was zum Denken überlassen :-)
Gruß Marcus

Es gibt keine Grenzen, aber du kannst welche ziehen.

Antworten