LabVIEWForum.de
DLL-Einbindung schlägt fehl - Druckversion

+- LabVIEWForum.de (https://www.labviewforum.de)
+-- Forum: LabVIEW (/Forum-LabVIEW)
+--- Forum: LabVIEW Allgemein (/Forum-LabVIEW-Allgemein)
+---- Forum: DLL & externer Code (/Forum-DLL-externer-Code)
+---- Thema: DLL-Einbindung schlägt fehl (/Thread-DLL-Einbindung-schlaegt-fehl)



DLL-Einbindung schlägt fehl - lupus022 - 22.05.2013 21:09

Guten Abend,
ich arbeite derzeit mit LabView 2012, und habe dafür eine BeispielVI. Diese enthält einen Verweis auf eine DLL, die vorhanden ist. Jedes Mal, wenn ich jedoch diese VI ausführen möchte, kommt der Fehler, dass die DLL entweder nicht gefunden oder nicht geladen werden konnte.
Was kann ich tun, damit ich den Fehler beheben kann?
Vielen Dank,
lupus


RE: DLL-Einbindung schlägt fehl - rolfk - 22.05.2013 22:58

(22.05.2013 21:09 )lupus022 schrieb:  Guten Abend,
ich arbeite derzeit mit LabView 2012, und habe dafür eine BeispielVI. Diese enthält einen Verweis auf eine DLL, die vorhanden ist. Jedes Mal, wenn ich jedoch diese VI ausführen möchte, kommt der Fehler, dass die DLL entweder nicht gefunden oder nicht geladen werden konnte.
Was kann ich tun, damit ich den Fehler beheben kann?
Vielen Dank,
lupus

Wo liegt die DLL, relativ zum VI das sie referenziert? Ist der Pfad zur DLL im Library Name or Path control in der CLN Konfiguration ein Filepfad oder nur ein Filename? Hat die DLL irgendwelche Abhängigkeiten die über Standard-Windows DLLs hinausgeht?


RE: DLL-Einbindung schlägt fehl - lupus022 - 23.05.2013 06:48

Ich habe die DLL sowohl direkt neben die DLL als auch in %system% gepackt. Abhängigkeiten laut DependencyWalker sind die Standarddlls + eine weitere DLL, die ich aber bereits ebenfalls in das Systemdirectory gepackt habe und in sämtliche Orte, an denen die Hauptdll liegt.
Der gesamte Pfad wurde im Library Name or Path control eingegeben (und an diesem Ort liegt auch die DLL).


RE: DLL-Einbindung schlägt fehl - rolfk - 23.05.2013 08:01

(23.05.2013 06:48 )lupus022 schrieb:  Ich habe die DLL sowohl direkt neben die DLL als auch in %system% gepackt. Abhängigkeiten laut DependencyWalker sind die Standarddlls + eine weitere DLL, die ich aber bereits ebenfalls in das Systemdirectory gepackt habe und in sämtliche Orte, an denen die Hauptdll liegt.
Der gesamte Pfad wurde im Library Name or Path control eingegeben (und an diesem Ort liegt auch die DLL).

Dependencies im selben Directory dann wo die Hauptdll liegt ist fast immer sinnlos. Das funktioniert nur wenn der DLL Programmiere explizit die DLL dort zu referenzieren versucht was beinahe niemand tut.

Bist Du auf einem Windows 64 Bit System, mit LabVIEW 32 Bit? Dann musst Du aufpassen welches %system% Directory Du verwendest.

Auch könnte es an einem Manifest in der DLL liegen das eine bestimmte SxS Assembly laden will.

Und das mit den "sämtlichen Orten wo die Hauptdll liegt" klingt verdächtig wie wenn da noch einige Halbleichen rumliegen. Aufräumen!

Wenn Du einen Installer für die DLL und Dependencies hast und dieser alles nett in %system% installiert dann benütze den und referenziere die DLL nur mit dem Namen in der Call Library Node. Ansonsten wirds lästig. Die DLL sollte dann relativ zu den VIs liegen die sie referenzieren, je nach VI Disk Struktur im selben Directory oder einem eine Ebene höher oder tiefer. Die Dependecy sollte immer durch einen Installer in %system% oder in ein Directory dass in der PATH Environment Variable vorkommt, installiert werden. Alternativ kann man sie eventuel auch ins Applicationsdirectory kopieren (das ist im Entwicklungssystem das Directory wo LabVIEW.exe liegt, und in einer Build application wo dein MyApp.exe liegt. Das von LabVIEW normal verwendete data Directory für extra Gemüse funktioniert hier nicht weil LabVIEW nichts mit dem Laden von Dependencies zu tun hat. Das tut direkt Windows und das hat vom data Directory keine Ahnung.


RE: DLL-Einbindung schlägt fehl - lupus022 - 23.05.2013 08:32

Für die DLLs gab es keinen Installer, leider.
Ich habe die DLLs in system32 kopiert, ich hoffe, das war richtig? Alternative wäre noch SysWow64.
Woran erkenne ich das Manifest, sollte es vorhanden sein?


RE: DLL-Einbindung schlägt fehl - rolfk - 23.05.2013 09:24

(23.05.2013 08:32 )lupus022 schrieb:  Für die DLLs gab es keinen Installer, leider.
Ich habe die DLLs in system32 kopiert, ich hoffe, das war richtig? Alternative wäre noch SysWow64.
Woran erkenne ich das Manifest, sollte es vorhanden sein?

Und Du hast natürlich LabVIEW für Windows 32 Bit installiert. Dann wird Windows NUR in SysWOW64 nach DLLs suchen. 32 Bit DLLs haben nichts in System32 zu suchen auf einem 64 Bit System.

Oder Du hast zwar LabVIEW 64 Bit installiert aber Deine DLL ist 32 Bit. Das kann sowieso nicht gehen. DLL und Applikation müssen alle immer dieselbe Bitness haben.


RE: DLL-Einbindung schlägt fehl - lupus022 - 23.05.2013 09:42

Die LabView-Version ist eine 32bit-Version. Ich habe die DLLs mal in SysWOW64 kopiert, bekam dann dort allerdings die Fehlermeldung beim Registrierungsversuch, dass die DLLs angeblich 32bit-DLLs wären, und daher nicht registriert werden könnten.
Außerdem meldete mir Windows, dass ich weitere DLLs benötigen würde, die ich jedoch noch nie auf dem System gefunden habe (z.B. DCOMP.dll oder api-ms-win-core-winrt-string-l1-1-0.dll).


RE: DLL-Einbindung schlägt fehl - lupus022 - 23.05.2013 11:16

Nachdem ich LabView mehrfach neugestartet habe, funktioniert auf einmal alles... (aber erst beim dritten Neustart)...
Verstehe einer die Software.
Danke aber für die Hilfe!