INFO: Dieses Forum nutzt Cookies...
Cookies sind für den Betrieb des Forums unverzichtbar. Mit der Nutzung des Forums erklärst Du dich damit einverstanden, dass wir Cookies verwenden.

Es wird in jedem Fall ein Cookie gesetzt um diesen Hinweis nicht mehr zu erhalten. Desweiteren setzen wir Google Adsense und Google Analytics ein.


Antwort schreiben 

Dieses Thema hat akzeptierte Lösungen:

notwendige DLL ist keine gültige Windows-Datei



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.01.2014, 17:49
Beitrag #1

Klausenwirt Offline
LVF-Grünschnabel
*


Beiträge: 23
Registriert seit: Jan 2014

2013
2013
DE



notwendige DLL ist keine gültige Windows-Datei
Hallo,

ich möchte eine DLL einbinden. Der Prototyp der Funktion lautet

CRCDLL_API unsigned short fnCRCDLL(unsigned short ui16_CRC16, char *pucBuf, unsigned short ui16_NumberOfBytes)

   

Ich bekomme aber folgende Fehlermeldung, wenn ich das Konfigurationsfenster für den Aufruf der Bibliothek verlasse.
   
Die DLL wurde auf Windows 7 mit Visual Studio 2010 64bit geschrieben aber als 32 bit gespeichert/gewandelt. LabVIEW 2013 32 bit ist auf Windows XP. Als Aufrufkonvention habe ich sdtcall gewählt.

Ich habe daraufhin "Microsoft Visual C++ 2010 x86 Redistributable" installiert, in der Hoffnung, die nötige Dateien zu erhalten. Nach Runterladen von der geforderten Datei kommt diese Fehlermeldung (msvcr110d.dll wurde in den Ordner System32 von Windows XP kopiert, da gehören die DLLs ja hin):
   

Als Fehlermeldung zeigt mir LabVIEW, dass die angegebene Bibliothek nicht gefunden oder nicht geladen werden kann, also meine eigene erstelte CRCDLL.dll.

Eine der Test-DLLs von "Einbinden einer DLL in LabVIEW.pdf" vom Tutorial dieses Forums klappt => Copy and paste. (lvPointer.dll)
   
Was übersehe ich?

Gruß von
Klausenwirt.
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
14.01.2014, 08:57
Beitrag #2

rolfk Offline
LVF-Guru
*****


Beiträge: 2.305
Registriert seit: Jun 2007

alle seit 6.0
1992
EN

2901GG
Niederlande
RE: notwendige DLL ist keine gültige Windows-Datei
(13.01.2014 17:49 )Klausenwirt schrieb:  Hallo,

ich möchte eine DLL einbinden. Der Prototyp der Funktion lautet

CRCDLL_API unsigned short fnCRCDLL(unsigned short ui16_CRC16, char *pucBuf, unsigned short ui16_NumberOfBytes)

Die DLL wurde auf Windows 7 mit Visual Studio 2010 64bit geschrieben aber als 32 bit gespeichert/gewandelt. LabVIEW 2013 32 bit ist auf Windows XP. Als Aufrufkonvention habe ich sdtcall gewählt.

Ich habe daraufhin "Microsoft Visual C++ 2010 x86 Redistributable" installiert, in der Hoffnung, die nötige Dateien zu erhalten. Nach Runterladen von der geforderten Datei kommt diese Fehlermeldung (msvcr110d.dll wurde in den Ordner System32 von Windows XP kopiert, da gehören die DLLs ja hin):

Nein, die Visual C Runtimes sind SxS assemblies und gehören ganz wo anders hin! Wo, überlässt Du am Besten dem Installer, alles andere wird garantiert Murks und Chaos!

Aber! Es wäre sinnvoll um beim Erstellen der DLL darauf zu achten NICHT die Debug Version zu builden!!!! Das D in msvcr110d.dll weist darauf hin, dass Deine DLL als Debugversion kompiliert ist und demgemäss auch die Debugversion der C Runtime haben will.

"Microsoft Visual C++ 2010 x86 Redistributable" enthält nur die Releaseversion der Runtime Library und die Debug Version kriegst Du nur auf den Computer wenn Du die ganze Visual C Umgebung installierst. Das kann nicht Sinn der Übung sein und wäre zudem illegal.

Rolf Kalbermatter
Technische Universität Delft, Dienst Elektronik und Mechanik
https://blog.kalbermatter.nl
Webseite des Benutzers besuchen Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
15.01.2014, 09:46
Beitrag #3

Klausenwirt Offline
LVF-Grünschnabel
*


Beiträge: 23
Registriert seit: Jan 2014

2013
2013
DE



RE: notwendige DLL ist keine gültige Windows-Datei
Ich habe jetzt die DLL als Releaseversion vorliegen. Damit lieferte mir die Funktion bei einmaligem Aufruf den richtigen Rückgabewert. Allerdings kam die Fehlermeldung 1097 (Es trat ein Ausnahmefehler im externen Code auf, der vom Knoten "Aufruf externer Bibliotheken" aufgerufen wurde. Diese Ausnahme kann Fehler im Speicher von LabVIEW verursacht haben. Speichern Sie alle Projekte an einem neuen Ort und starten Sie LabVIEW erneut. Überprüfen Sie die Werte, die an den Knoten zum Aufruf externer Bibliotheken übergeben wurden.).

Wenn ich die Aufrufkonvention zu C ändere, dann kommt keine Fehlermeldung. Ich hab gelesen, dass mit dieser Aufrufkonvention LabVIEW die Daten aus dem Stack holt, mit stdcall macht das die DLL (wenn sie so programmiert wurde). Ich lass das Programm jetzt mal ne Stunde laufen, vielleicht kommt es ja zum Stackoverflow.
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
15.01.2014, 14:32
Beitrag #4

Klausenwirt Offline
LVF-Grünschnabel
*


Beiträge: 23
Registriert seit: Jan 2014

2013
2013
DE



RE: notwendige DLL ist keine gültige Windows-Datei
Es ist jetzt wirklich so, dass LabVIEW immer wieder abstürzt. Dabei muss ich das Programm nicht mal debuggen, schon beim Bearbeiten stürzt es ab. Wenn ich die DLL aber mit der anderen Konvention aufrufe, kommt gleich die Fehlermeldung.
Was kann ich da tun?
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
15.01.2014, 23:14
Beitrag #5

rolfk Offline
LVF-Guru
*****


Beiträge: 2.305
Registriert seit: Jun 2007

alle seit 6.0
1992
EN

2901GG
Niederlande
RE: notwendige DLL ist keine gültige Windows-Datei

Akzeptierte Lösung

(15.01.2014 14:32 )Klausenwirt schrieb:  Es ist jetzt wirklich so, dass LabVIEW immer wieder abstürzt. Dabei muss ich das Programm nicht mal debuggen, schon beim Bearbeiten stürzt es ab. Wenn ich die DLL aber mit der anderen Konvention aufrufe, kommt gleich die Fehlermeldung.
Was kann ich da tun?

Die DLL sehr gut anschauen, vor allem den C Source Code. Wenns beim Aufrufen einer DLL crasht und kracht, dann macht die DLL Dinger die sie nicht tun sollte. Da kann LabVIEW nichts daran tun, und Dir erzählen was Du falsch machst ist auch nicht drin. Du darfst mir aber glauben dass das Aufrufen von DLLs in LabVIEW ohne Crash sehr gut möglich ist, wenn die DLL gut debugged ist und keinen Pfusch macht. Die Call Library Node selber tut was man ihr sagt und wenn das stimmt mit dem was die DLL erwartet geht es ganz einfach und gut.

Aber statt mit calling Conventions zu probieren, solltest Du das Headerfile anschauen und ganz einfach feststellen welche es sein sollte. Die Konfiguration der Call Library Node hat viele Variablen und diese durch Trial und Error zu eruieren ist ziemlich zeitraubend und nur sinnvoll wenn du 110% sicher bist dass die DLL selber keinen einzigen Fehler enhält. Das scheint mir aber nicht gewährleistet und ist auch etliche Male schwerer dann die Call Library Node gemäss den Headerinformationen korrekt zu konfigurieren.

Rolf Kalbermatter
Technische Universität Delft, Dienst Elektronik und Mechanik
https://blog.kalbermatter.nl
Webseite des Benutzers besuchen Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
16.01.2014, 10:25
Beitrag #6

Klausenwirt Offline
LVF-Grünschnabel
*


Beiträge: 23
Registriert seit: Jan 2014

2013
2013
DE



RE: notwendige DLL ist keine gültige Windows-Datei
Eine Variable in der DLL war int, seit sie auf uint16 geändert wurde, gehts. LabVIEW ist seitdem nicht mehr abgestürzt.
Vielen Dank!
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
Antwort schreiben 


Gehe zu: