Seite 1 von 1

Flexibles Import?

Verfasst: 29.06.2017 19:18
von HeX0R
Ich habe folgenden Code in einem meiner Tools, um die Suchfunktion eines WebKits zu verwenden:

Code: Alles auswählen

CompilerIf #PB_Compiler_Processor = #PB_Processor_x64
	ImportC "/usr/lib/x86_64-linux-gnu/libwebkitgtk-3.0.so";.2"
		webkit_web_view_search_text(webView, text.p-ascii, case_sensitive, forward, wrap)
	EndImport
CompilerElse
	ImportC "/usr/lib/libwebkitgtk-1.0.so";.2"
		webkit_web_view_search_text(webView, text.p-ascii, case_sensitive, forward, wrap)
	EndImport
CompilerEndIf
Dieser Mist funktioniert aber natürlich wieder nur bei den Distributionen, die auch genau diese Versionen installiert haben.
Gibt es eine elegante Möglichkeit das zu umschiffen, oder muss ich umständlich per OpenLibrary, mit vorherigem Durchsuchen per FileSize und GetFunction arbeiten?

Re: Flexibles Import?

Verfasst: 05.07.2017 07:40
von uweb
Hallo HeX0R,
ich mache zwar (noch) wenig mit Linux und ImportC aber ich glaube ich habe einen passenden Link für Dich:
http://www.purebasic.fr/german/viewtopi ... 3&start=29

Re: Flexibles Import?

Verfasst: 05.07.2017 10:09
von NicTheQuick
Zunächst mal würde ich es so schreiben, damit der Pfad egal ist:

Code: Alles auswählen

CompilerIf #PB_Compiler_Processor = #PB_Processor_x64
   ImportC "-lwebkitgtk-3.0"
      webkit_web_view_search_text(webView, text.p-ascii, case_sensitive, forward, wrap)
   EndImport
CompilerElse
   ImportC "-lwebkitgtk-1.0"
      webkit_web_view_search_text(webView, text.p-ascii, case_sensitive, forward, wrap)
   EndImport
CompilerEndIf
Um die Version musst du dich dann leider selbst kümmern mit OpenLibrary(). Auf welchen Distributionen hast du denn andere Versionen als 1.0 und 3.0 von libwebgitgtk gefunden?

Re: Flexibles Import?

Verfasst: 05.07.2017 13:11
von HeX0R
Mich hatte ein User angeschrieben, dass die 1.0er Version bei ihm nicht installiert ist, nur 2.0 und 4.0, wenn ich mich recht erinnere.
Und 1.0 liess sich nicht nachinstallieren?!
Kann das sein?

Ich hatte auch nur 1.0 für x86 und 3.0 für x64 gewählt, weil das in meinen genutzten Linux Distributionen installiert war.
Ohne lange drüber nachzudenken, wie das andere handhaben.

Na ja, irgendwie macht das Import dann bei Linux wenig Sinn, also doch zu Fuß...

Re: Flexibles Import?

Verfasst: 05.07.2017 13:25
von NicTheQuick
Es gibt offenbar webkitgtk2 in Version 2.17.4. Von Version 4 habe ich noch nicht gelesen, höchstens Version 2.4, aber die ist ja auch schon veraltet.
Mein Vorschlag wäre dann einfach zwei verschiedene Versionen zu kompilieren. Dann kannst du weiterhin die Vorteile von "Import" benutzen.

Re: Flexibles Import?

Verfasst: 05.07.2017 17:14
von mk-soft
Ich weiss nicht wo ich das her hatte. Bei mir habe ich folgende Wekkit installiert.
sudo apt-get install libwebkitgtk-dev libwebkitgtk-3.0-dev libwebkit2gtk-4.0-dev
Unbuntu v16.04.2

Re: Flexibles Import?

Verfasst: 11.07.2017 00:01
von HeX0R
Nur so zur Info, um das Ganze abzurunden, ich habe das jetzt relativ unspektakulär so geregelt:

Code: Alles auswählen

PrototypeC webkit_web_view_search_text(webView, text.p-utf8, case_sensitive, forward, wrap)
Global webkit_web_view_search_text.webkit_web_view_search_text
Global libwebkitDLL.i

libwebkitDLL = OpenLibrary(#PB_Any, "libwebkitgtk-4.0.so")
If libwebkitDLL = 0
	libwebkitDLL = OpenLibrary(#PB_Any, "libwebkitgtk-3.0.so")
EndIf
If libwebkitDLL = 0
	libwebkitDLL = OpenLibrary(#PB_Any, "libwebkitgtk-2.0.so")
EndIf
If libwebkitDLL = 0
	libwebkitDLL = OpenLibrary(#PB_Any, "libwebkitgtk-1.0.so")
EndIf
If libwebkitDLL
	webkit_web_view_search_text = GetFunction(libwebkitDLL, "webkit_web_view_search_text")
EndIf
Nicht schön, aber selten und für eine evtl. kommende Version 4 schon gerüstet :mrgreen:

Re: Flexibles Import?

Verfasst: 11.07.2017 16:20
von GPI
Das mit Version 4 solltest du dir überlegen. Möglich das da dann die Funktion andere Parameter bekommt, die du natürlich nicht beachten kannst. Das ist doch der Sinn daran, das man die Version beim laden angibt, oder?