LabVIEWForum.de
Fehler bei DLL-Einbindung in LV - 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: Fehler bei DLL-Einbindung in LV (/Thread-Fehler-bei-DLL-Einbindung-in-LV)



Fehler bei DLL-Einbindung in LV - Philip - 13.08.2008 10:34

Hallo zusammen

Ich versuche momentan mein C program in eine DLL zu kompilieren und dann in LabVIEW einzubinden.
Auf dem PC, wo ich das C program geschrieben habe funktioniert alles tip top.

Wenn ich aber versuche dieselbe DLL Datei auf einem anderen PC laufen zu lassen wird von LV die folgende Fehlermeldung generiert:

Error loading <DLL-pfad>
This application has failed to start because the application configuration is incorrect.
Reinstalling the application may fix this problem.

Ich habe mir dann mal das Tutorial in diesem Forum angeschaut und ausprobiert, ob das Einbinden der DLL im Tutorial zip-file auf verschiedenen PCs funktioniert.
Es hat auf allen PCs funktioniert.

Somit liegt das Problem wahrscheinlich bei der Compiler Einstellung welcher die DLL generiert, ich weiss einfach nicht genau wo.
Komisch ist es auch, dass die DLL auf PC funktioniert, wo sie generiert wurde, doch auf anderen PCs nicht.
Ich benütze das Microsoft Visual Studio C++ 9 Express und LV 7.1.

Ich habe mal eine Test dll, ein Test Programm für LV 7.1 und den Test source code für c angehängt. (LabVIEWTest.vi, Test.dll)
Das C program wurde mir nicht erlaubt hochzuladen, darum hier der Inhalt:

/* Call Library source file */

#include "extcode.h"

__declspec (dllexport) long addierer(long *a, long *b, long *erg);

long addierer(long *a, long *b, long *erg)
{

*erg = *a + *b;
return 0;

}

Die Libary Datei zu meiner DLL "Test.lib" konnte ich auch nicht hochladen.

Dieses Test Programm funktioniert auch nur auf dem PC, wo die DLL compiliert wurde und generiert die gleiche Fehlermeldung wie oben.

Kann mir da jemand weiter helfen?

vielen dank

philip


Fehler bei DLL-Einbindung in LV - RoLe - 13.08.2008 10:54

Also, bei mir meldet LabVIEW, dass die MSVCR90D.dll nicht gefunden wurde.
Die hast du vermutllich auf deinem "Microsoft Visual Studio C++ 9 Express"-PC aber nicht auf den anderen.

Was das genau ist und was du machen musst, weiss ich nicht.
Ev. ist das eine Microsoft-Run-Time die noch zusätzlich auf den Rechner installiert werden muss.


Fehler bei DLL-Einbindung in LV - jg - 13.08.2008 21:14

Schau mal hier.

Vielleicht hilft das...

Die DLL MSVCR90D.dll (also mit D) deutet darauf hin, dass du da was im Debug-Modus gelinkt hast. Zumindest verstehe ich so die Links, die ich bei Google gefunden habe.

MfG, Jens


Fehler bei DLL-Einbindung in LV - rolfk - 14.08.2008 09:28

' schrieb:Also, bei mir meldet LabVIEW, dass die MSVCR90D.dll nicht gefunden wurde.
Die hast du vermutllich auf deinem "Microsoft Visual Studio C++ 9 Express"-PC aber nicht auf den anderen.

Was das genau ist und was du machen musst, weiss ich nicht.
Ev. ist das eine Microsoft-Run-Time die noch zusätzlich auf den Rechner installiert werden muss.

Ziemlich gut getippt Role! Das ist auch der Grund warum ich meine LabVIEW DLLs noch mit Visual Studio 6 (ja ich weiss ein wirklich alter Oldtimer) kompiliere. Die laufen dann auf allen PCs da die entsprechenden Rumtime libraries selbst auf einem W2K Computer standard sind (und sogar auf einem W95 Computer normalerwiese mit Garantie drauf waren, durch Installation von IE oder anderen MS Applikationen ohne die man ja eh kaum was machen kann.

Was man dabei machen muss ist (naja) einfach:

Irgendwo in der Visual Studio Installation gibt es ein Dokument das angibt welches die entsprechenden Redistributables sind. Das sind Files die Du mit einer Applikation mitgeben darfst/musst. Meist gibt es ein seperates Installationsprogram um diese Files auf einem Zielrechner zu installieren aber alternativ darf man die auch in einen eigenen Installer einbinden von wo sie normalerweise im Systemdirectory abgelegt werden.

Rolf Kalbermatter


Fehler bei DLL-Einbindung in LV - angori - 26.10.2009 11:46

Hallo miteinander

Ich habe das Problem, dass wenn ich den Code von Philip selbst kompiliere (mit Visual C++ 2008 Express Edition), mir LV (Version 8.6) die folgende Fehlermeldung liefert:

"Error 1097 occurred at Call Library Function Node in LabVIEWTest.vi"
"Possible reason(s):

LabVIEW: An exception occurred within the external code called by a Call Library Function Node. The exception may have corrupted LabVIEW's memory. Save any work to a new location and restart LabVIEW."



Wenn ich jedoch Philip's DLL gebrauche funktioniert alles. Hat jemand eine Idee an was das liegen könnte?
Ich sollte unbingt eine DLL schreiben die mehr als nur zwei Zahlen addiert..doch zuerst muss das mal klappen..!


Besten Dank!
angori


Fehler bei DLL-Einbindung in LV - rolfk - 26.10.2009 12:24

Das könnte zu Beispiel daran liegen dass Du in Deinem Compiler eine andere defaqult calling convention verwendest. Visual C verwendet meist cdecl als default aber das könnte in Deiner Version anders sein. Checkst Du halt mal alles in Deinen DLL Project Settings.


Fehler bei DLL-Einbindung in LV - angori - 26.10.2009 13:56

Besten Dank für deinen Tipp. Ich habe jedoch nichts bezüglich Calling Convention gefunden...
Aber es ist so, dass wenn ich die Funktion innerhalb der DLL leer lasse (so dass sie nichts zu tun hat), dann gibt LV keinen Fehler aus. Irgendwie macht also die Addition selbst Probleme. ..aber wieso wohl?

Gruss
angori


Fehler bei DLL-Einbindung in LV - angori - 26.10.2009 15:05

es geht jetzt.. ich hatte jeweils die Werte und nicht deren Pointer übergeben - innerhalb von LV.

Danke für die Hilfe!


Fehler bei DLL-Einbindung in LV - rolfk - 26.10.2009 15:06

Klingt zwar dumm, aber ist ein Tippfehler eventuel der Bösewicht? Ansonsten Source Code, Project Files und alles mal uploaden. Wir können ansonsten hier noch tagelang Robert Lembkes lustiges Rätselraten machen auf diese Weise.

Das ist ungefähr dasselbe wie wenn ich zur Garage gehe und sage, dass mein Auto ein komisches Geräusch macht und auf die Frage wo es denn steht antworte, dass das noch zuhause ist.