Seite 1 von 1

#pragma abfragen

Verfasst: Mi, 07. Okt 2020 15:34
von Jan
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

Re: #pragma abfragen

Verfasst: Mi, 07. Okt 2020 15:47
von Tom
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.

Re: #pragma abfragen

Verfasst: Mi, 07. Okt 2020 15:55
von Jan
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

Re: #pragma abfragen

Verfasst: Mi, 07. Okt 2020 16:01
von Marcus Herz
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

Re: #pragma abfragen

Verfasst: Mi, 07. Okt 2020 16:04
von Jan
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

Re: #pragma abfragen

Verfasst: Mi, 07. Okt 2020 16:08
von Marcus Herz
aDll := dllInfo(, DLL_INFO_LIST)
gibt alle geladenen DLL zurück

Re: #pragma abfragen

Verfasst: Mi, 07. Okt 2020 16:09
von Marcus Herz
was war denn Variante 3?

Re: #pragma abfragen

Verfasst: Mi, 07. Okt 2020 16:10
von Jan
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

Re: #pragma abfragen

Verfasst: Mi, 07. Okt 2020 16:19
von Tom
@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.

Re: #pragma abfragen

Verfasst: Mi, 07. Okt 2020 16:21
von Tom

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')

Re: #pragma abfragen

Verfasst: Mi, 07. Okt 2020 16:23
von Jan
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

Re: #pragma abfragen

Verfasst: Mi, 07. Okt 2020 16:37
von Tom
Gerne. Aber Marcus hatte den Impuls gegeben.

Re: #pragma abfragen

Verfasst: Mi, 07. Okt 2020 17:04
von Marcus Herz
Ich wollte Jan auch noch ein bisschen was zum Denken überlassen :-)