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 

Fehler 1097 bei Aufruf C++ DLL



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!

06.07.2010, 09:36
Beitrag #1

F-Trooper Offline
LVF-Neueinsteiger


Beiträge: 3
Registriert seit: Jul 2010

2009
2010
de


Deutschland
Fehler 1097 bei Aufruf C++ DLL
Tag zusammen,

ich versuche eine zugekaufte C++ DLL in LabVIEW per Knoten einzubinden. Dabei bekomme ich von LabVIEW immer wieder den Fehler "Fehler 1097 ist bei Knoten zum Aufruf externer Bibliotheken aufgetreten".

Bin mir nicht sicher ob die Parameter für die DLL Stimmen:

Der Eintrag in der Header lauetet:
A_API int EXP ReadEEPROM (int MasterID, LPCSTR *Content, FILE *Log);

Meine Funktionstyp in LabVIEW lautet (stdcall / Winapi):
int32_t ReadEEPROM(int32_t MAsterID, LStrHandle *Content, int64_t *Log);


Danke
Christoph
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
Anzeige
06.07.2010, 18:14
Beitrag #2

IchSelbst Offline
LVF-Guru
*****


Beiträge: 3.687
Registriert seit: Feb 2005

11, 14, 15, 17, 18
-
DE

97437
Deutschland
Fehler 1097 bei Aufruf C++ DLL
' schrieb:Der Eintrag in der Header lautet:
A_API int EXP ReadEEPROM (int MasterID, LPCSTR *Content, FILE *Log);

Meine Funktionstyp in LabVIEW lautet (stdcall / Winapi):
int32_t ReadEEPROM(int32_t MAsterID, LStrHandle *Content, int64_t *Log);
Rückgabewert und MasterID passen so. Bei *Content und *Log zweifle ich.

LPCSTR ist ein "const char*", also ein normaler PChar. Ein LPCStr* wäre also ein Pointer auf einen Pointer. Das geht in LabVIEW nicht - so einfach. LStrHande* ist ein Pointer auf einen Stringhandle. Ein Stringhandle ist aber was ganz was anderes als ein PChar.

FILE alleine ist bereits ein Pointer. File* wäre also schon wieder ein Pointer auf einen Pointer - was schon wieder nicht ginge. Bist du sicher, dass FILE ein I64 ist, kein I32?

Jeder, der zur wahren Erkenntnis hindurchdringen will, muss den Berg Schwierigkeit alleine erklimmen (Helen Keller).
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
07.07.2010, 05:45
Beitrag #3

F-Trooper Offline
LVF-Neueinsteiger


Beiträge: 3
Registriert seit: Jul 2010

2009
2010
de


Deutschland
Fehler 1097 bei Aufruf C++ DLL
' schrieb:FILE alleine ist bereits ein Pointer. File* wäre also schon wieder ein Pointer auf einen Pointer - was schon wieder nicht ginge. Bist du sicher, dass FILE ein I64 ist, kein I32?

Ich bin mir sicher das File ein I64 ist.

Seit der LV- Version 8 ist dieses als I64 zu definieren, bei vorhergendere Versionen war es ein I32.
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
18.07.2010, 21:58 (Dieser Beitrag wurde zuletzt bearbeitet: 18.07.2010 21:59 von rolfk.)
Beitrag #4

rolfk Offline
LVF-Guru
*****


Beiträge: 2.302
Registriert seit: Jun 2007

alle seit 6.0
1992
EN

2901GG
Niederlande
Fehler 1097 bei Aufruf C++ DLL
' schrieb:Ich bin mir sicher das File ein I64 ist.

Seit der LV- Version 8 ist dieses als I64 zu definieren, bei vorhergendere Versionen war es ein I32.

Wer hat das gesagt? Das gilt allenfalls für 64 Bit Windows UND dann auch nur wenn es 64 Bit LabVIEW ist.

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
04.07.2011, 13:47
Beitrag #5

ewiebe Offline
LV Fortgeschrittener
**


Beiträge: 60
Registriert seit: Mar 2011

LV bis 2021
2005
DE

32xxx
Deutschland
RE: Fehler 1097 bei Aufruf C++ DLL
Hat jemand herausgefunden, wie das geht?
Ich habe dasselbe Problem
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
05.02.2014, 14:26 (Dieser Beitrag wurde zuletzt bearbeitet: 05.02.2014 14:26 von Kiesch.)
Beitrag #6

Kiesch Offline
LVF-Stammgast
***


Beiträge: 394
Registriert seit: Mar 2009

2019, 2018, 2016
2009
DE

04103
Deutschland
RE: Fehler 1097 bei Aufruf C++ DLL
btw. ich hatte den gleichen Fehler beim Aufrufen einer DLL. Allerdings scheint die DLL dabei sogar korrekt ausgeführt worden zu sein (das was die gecallte Funktion machen sollte ist auch passiert). Verwirrt mich grade xD

Was jedenfalls (bei mir) geholfen hat ist die Aufrufkonvention von C nach stdCall zu ändern. Wenn mir jetzt noch jemand erklären könnte warum das geholfen hat wäre ich dankbar Big Grin

Zitat:Märchen und Geschichten werden erzählt am Lagerfeuer, technischen Fakten werden mitgeteilt (oder so). (Genauso wie Software nicht auf einem Server "herumliegt", die ist dort installiert.)
*Zitat: IchSelbst*
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
Anzeige
23.02.2014, 11:29 (Dieser Beitrag wurde zuletzt bearbeitet: 23.02.2014 11:31 von rolfk.)
Beitrag #7

rolfk Offline
LVF-Guru
*****


Beiträge: 2.302
Registriert seit: Jun 2007

alle seit 6.0
1992
EN

2901GG
Niederlande
RE: Fehler 1097 bei Aufruf C++ DLL
(05.02.2014 14:26 )Kiesch schrieb:  btw. ich hatte den gleichen Fehler beim Aufrufen einer DLL. Allerdings scheint die DLL dabei sogar korrekt ausgeführt worden zu sein (das was die gecallte Funktion machen sollte ist auch passiert). Verwirrt mich grade xD

Was jedenfalls (bei mir) geholfen hat ist die Aufrufkonvention von C nach stdCall zu ändern. Wenn mir jetzt noch jemand erklären könnte warum das geholfen hat wäre ich dankbar Big Grin

Bei cdecl räumt der Aufrufer den Stack auf, bei stdcall die Funktion selber. Wenn Du jetzt eine Funktion hast die stdcall compiliiert wurde und Du in LabVIEW sagst dass ist eine cdecl Funktion, dann raumt sowohl die Funktion als danach auch LabVIEW den Stack auf und der Stackpointer weist danach ins Chaos, sprich Crash/Absturz. Wenn Du in der Call Library Node Configuration das Error Handling nicht ganz ausschaltest, kann LabVIEW danach zwar erkennen dass etwas nicht mehr stimmt (und generiert deshalb den error 1097) aber der Pfusch ist schon geschehen und die einzige sichere Methode ist um LabVIEW neu zu starten wenn Du keine ganz hässlichen Nebeneffekte bis hin zu definitiv korrumpierten VIs provizieren möchtest.

Aber grundsätzlich ist zu sagen, nur weil die Funktion zu machen scheint was sie tun soll ist noch lange kein Beweis dass die Konfiguration nicht doch irgendwie nicht stimmt und irgendwo kein Speicher überschrieben wurde. Das kann sogar geschehen ohne dass LabVIEW das mit einem error 1097 erkennen kann.

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
24.02.2014, 11:15
Beitrag #8

Kiesch Offline
LVF-Stammgast
***


Beiträge: 394
Registriert seit: Mar 2009

2019, 2018, 2016
2009
DE

04103
Deutschland
RE: Fehler 1097 bei Aufruf C++ DLL
gibt es denn Möglichkeiten (ausser "Hersteller" selbst fragen) rauszufinden welche Aufrufkonvention da wirklich verwendet wurde beim Kompilieren? Muss ganz ehrlich sagen, dass ich zwar etwas Ahnung vom C coden habe (und theoretisch sogar den Code der DLL auch habe), praktisch aber eigentlich nicht genug Ahnung um als mehr als nur Nutzer zu fungieren.

Hinzu kommt das zwar Wrapper VIs teilweise existieren, die allerdings für LV 4.X geschrieben wurden und zwar noch grundsätzlich funktionieren würden (konnte die irgendwann mal hochspeichern über nen Zwischenschritt auf LV 8.0 oder 8.2), aber quasi ne Blackbox sind da LV 2013 natürlich nix mehr mit der CIN node anzufangen weis... (sprich ich kann aktuell nichtmal nachprüfen wie die VIs eigentlich genau funzen). Außerdem haben die auch nicht den gesamten Funktionsumfang der DLL abgedeckt. Immerhin: Der DLL Aufruf mit stdcall scheint bisher tadellos zu klappen (auch bei längerer Laufzeit und mehrfachen aufrufen; konnte bei >3h laufzeit und >20 Aufrufe pro Sek) bisher noch keine negativen Nebeneffekte feststellen.

Gruß Kiesch

P.S: Danke auch schonmal für den kleinen theoretischen Oberbau. Lerne immer gerne dazu :-)

Zitat:Märchen und Geschichten werden erzählt am Lagerfeuer, technischen Fakten werden mitgeteilt (oder so). (Genauso wie Software nicht auf einem Server "herumliegt", die ist dort installiert.)
*Zitat: IchSelbst*
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
24.02.2014, 11:22 (Dieser Beitrag wurde zuletzt bearbeitet: 24.02.2014 11:26 von rolfk.)
Beitrag #9

rolfk Offline
LVF-Guru
*****


Beiträge: 2.302
Registriert seit: Jun 2007

alle seit 6.0
1992
EN

2901GG
Niederlande
Tongue RE: Fehler 1097 bei Aufruf C++ DLL
(24.02.2014 11:15 )Kiesch schrieb:  gibt es denn Möglichkeiten (ausser "Hersteller" selbst fragen) rauszufinden welche Aufrufkonvention da wirklich verwendet wurde beim Kompilieren? Muss ganz ehrlich sagen, dass ich zwar etwas Ahnung vom C coden habe (und theoretisch sogar den Code der DLL auch habe), praktisch aber eigentlich nicht genug Ahnung um als mehr als nur Nutzer zu fungieren.

Die einzige mir bekannte Alternative ist um den Code zu disassemblieren und im Assemblycode zu schauen ob die Funktion den Stack selber aufräumt oder nicht. Nicht gerade eine Methode die ich einem normalen Programmierer empfehlen würde. Big Grin

Da Du den C Code zur DLL hast ist das aber nicht nötig. Man muss dann nur im C Code schauen ob es entsprechende Definition __cdecl oder __stdcall vor den Funktionsdeklarationen hat. Hats die nicht muss in der dazugehörigen Projectdatei geschaut werden welche default calling convention da gewählt wurde. Visual C verwendet Standard cdecl wenn man im Project nichts ändert.

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
24.02.2014, 12:38
Beitrag #10

Kiesch Offline
LVF-Stammgast
***


Beiträge: 394
Registriert seit: Mar 2009

2019, 2018, 2016
2009
DE

04103
Deutschland
RE: Fehler 1097 bei Aufruf C++ DLL
Boah. Nach langem suchen doch noch fündig geworden. Die Funktionen enthalten in der Declaration "APIENTRY", was laut Google heist das die über "WINAPI" und daher mit stdcall aufgerufen werden wollen. Nu hab ichs dann hoffentlich also komplett verstanden. Danke für die kompetente Hilfe Smile

Gruß Kiesch

Zitat:Märchen und Geschichten werden erzählt am Lagerfeuer, technischen Fakten werden mitgeteilt (oder so). (Genauso wie Software nicht auf einem Server "herumliegt", die ist dort installiert.)
*Zitat: IchSelbst*
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
Antwort schreiben 


Möglicherweise verwandte Themen...
Themen Verfasser Antworten Views Letzter Beitrag
  Fehlercode 1097 beim Aufrufen einer C++ DLL Dr. Nuke 11 3.150 22.07.2022 22:39
Letzter Beitrag: Martin.Henz
  Picoscope Err 1097 ares2013 10 9.445 26.12.2020 14:03
Letzter Beitrag: hansi9990
  Fehler 1097 beim Übergeben von Arrays Flemmy 4 8.537 22.10.2017 21:07
Letzter Beitrag: rolfk
  Aufruf externe DLL Fehler 1097 Lars_Tragl 1 8.482 11.08.2016 16:13
Letzter Beitrag: Freddy
  Error 1097 katanad 2 10.448 15.06.2016 11:31
Letzter Beitrag: katanad
  DLL Fehler 1097 M.VI 1 5.815 02.12.2014 08:38
Letzter Beitrag: GerdW

Gehe zu: