Wenn dein Problem oder deine Frage geklärt worden ist, markiere den Beitrag als "Lösung",
indem du auf den "Lösung" Button rechts unter dem entsprechenden Beitrag klickst. Vielen Dank!
13.08.2008, 10:34 (Dieser Beitrag wurde zuletzt bearbeitet: 13.08.2008 10:37 von Philip.)
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.
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.
.·´¯)--> Leben ist das, was dir passiert, wenn du eifrig dabei bist andere Pläne zu machen <--(¯`·.
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
Wer die erhabene Weisheit der Mathematik tadelt, nährt sich von Verwirrung. (Leonardo da Vinci)
!! BITTE !! stellt mir keine Fragen über PM, dafür ist das Forum da - andere haben vielleicht auch Interesse an der Antwort!
' 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.
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..!
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.
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?
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.