Seite 1 von 2

Problem mit Openlibrary()

Verfasst: 08.08.2012 19:15
von Piwo
Hi,
ich schreibe gerade an einer funktion welche rausfindet ob eine bestimmte funktion in einer .dll datei vorhanden ist.
Das problem daran ist, dass ich die dafür nötigen funktionen wie z.B. examinelibraryfunction(), getlibraryfunction() etc. nicht benutzen kann ohne vorher die datei mit openlibrary zu initialisieren, diese funktion spuckt mir jedoch ständig fehler aus...

beispiel aus meinem aufbau:

Code: Alles auswählen

If OpenLibrary(1, OpenFileRequester(...))
...
else 
messagerequester("", "feher")
endif
Hab den filerequester jetzt mal abekürzt , der funktioniert aber ganz normal und ich wähle auch bei jedem versuch irgendeine x-beliebige .dll-datei, jedoch bei jeder einzelnen krieg ich eine fehlerausgabe, weiß jemand wo mein fehler liegt?
Gibt es bestimmte funktionen, prozedure, situationen oder sonst was welche die funktion einschränken?

Danke im vorraus :)

Re: Problem mit Openlibrary()

Verfasst: 08.08.2012 23:02
von Bisonte
versuchst du vielleicht mit PB (x86) 64Bit DLL's zu laden oder umgekehrt ? Da könnte es evt. dran liegen...

Re: Problem mit Openlibrary()

Verfasst: 08.08.2012 23:08
von Piwo
Naja ich habe ein 64bit-system und darauf auch purebasic 64bit installiert...
habe verschiedenstmögliche .dll's ausprobiert, sogar welche aus dem windows-ordner selbst, jedoch hat es mit keiner davon geklappt :/

Re: Problem mit Openlibrary()

Verfasst: 08.08.2012 23:13
von STARGÅTE
Dieser Code funktioniert bei mir ohne Probleme:

Code: Alles auswählen

Enumeration
	#Library
EndEnumeration

Define FileName.s = OpenFileRequester("Dynamische Bibliothek öffnen...", "", "Dynamische Bibliothek|*.dll", 0)

If FileName And OpenLibrary(#Library, FileName)
	If ExamineLibraryFunctions(#Library)
		While NextLibraryFunction()
			Debug LibraryFunctionName()
		Wend
	EndIf
	CloseLibrary(#Library)
EndIf

Re: Problem mit Openlibrary()

Verfasst: 09.08.2012 00:30
von Piwo
Habe deinen code exakt kopiert und ausprobiert, jedoch ohne erfolg, bei mir tut sich da nichts... habe noch eine else-abfrage zum dahinter gesetzt und der macht tatsächlich den fehler beim openlibrary, bin langsam echt ratlos :S
habe es sicherheitshalber mit mehreren verschiedener dll's ausprobiert, hab keine ahnung woran das noch liegen könnte...

Re: Problem mit Openlibrary()

Verfasst: 09.08.2012 06:28
von DarkDragon
Piwo hat geschrieben:Naja ich habe ein 64bit-system und darauf auch purebasic 64bit installiert...
habe verschiedenstmögliche .dll's ausprobiert, sogar welche aus dem windows-ordner selbst, jedoch hat es mit keiner davon geklappt :/
Aus welchem Verzeichnis hast du die Windows DLLs genommen? %SYSTEMROOT%\System32 oder %SYSTEMROOT%\SysWow64? Du solltest die aus ersterem nehmen, wenn du 64bit Programme kompillierst und aus zweiterem wenn nicht.

Re: Problem mit Openlibrary()

Verfasst: 09.08.2012 13:18
von Piwo
Ja im system32-ordner klappt es tatsächlich mit einigen der dateien! Hat jemand ne Ahnung wie ich die "kompatibilität" auch auf andere .dll's erweitern kann? Müsste ich dafür nicht einfach ie compiler-optionen umkonfigurieren?

Re: Problem mit Openlibrary()

Verfasst: 09.08.2012 14:25
von ts-soft
Die meisten DLLs sind 32-Bit (abgesehen von denen des OS). 32-Bit DLLs lassen sich nur von 32-Bit programmen laden. 64-Bit DLLs nur von 64-Bit Programmen.

Es wäre also ratsam, zusätzlich noch die 32-Bit Version von PB zu installieren und eine 32-Bit Applikation zu erstellen.

Gruß
Thomas

Re: Problem mit Openlibrary()

Verfasst: 09.08.2012 14:47
von Piwo
Ok verstehe, danke :)

Muss ich wirklich direkt ne komplett neue PB-version installieren, oder gibt es eine möglichkeit einfach einen 32-compiler dazu zu installieren und vor dem kompilieren jeweils den gewünschten compiler anzuwählen?
Wenn ich mich nicht irre dürften sämtliche kompilierte programme vom 64er-compiler ja auch nur auf 64er-plattformen laufen...

Re: Problem mit Openlibrary()

Verfasst: 09.08.2012 15:27
von STARGÅTE
Jo gibt es.
Ich benutze zB auf einem 64-Bt Rechner den 64-Bit PB-Editor und habe dort unter:
Datei -> Einstellungen -> Compiler -> [...]
den 32-Bit Compiler (pbcompiler.exe) aus der 32-Bit version hinzugefügt.

So kann ich beim kompilieren dann in der Select-Box auswählen, welcher Kompiler genutzt werden soll.