06.07.2010, 09:36
Beitrag #1
|
F-Trooper
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
|
|
|
06.07.2010, 18:14
Beitrag #2
|
IchSelbst
LVF-Guru
![*](images/labview/lvfpip.gif) ![*](images/labview/lvfpip.gif) ![*](images/labview/lvfpip.gif) ![*](images/labview/lvfpip.gif) ![*](images/labview/lvfpip.gif)
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).
|
|
|
07.07.2010, 05:45
Beitrag #3
|
F-Trooper
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.
|
|
|
18.07.2010, 21:58
(Dieser Beitrag wurde zuletzt bearbeitet: 18.07.2010 21:59 von rolfk.)
Beitrag #4
|
|
|
04.07.2011, 13:47
Beitrag #5
|
ewiebe
LV Fortgeschrittener
![*](images/labview/lvfpip.gif) ![*](images/labview/lvfpip.gif)
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
|
|
|
05.02.2014, 14:26
(Dieser Beitrag wurde zuletzt bearbeitet: 05.02.2014 14:26 von Kiesch.)
Beitrag #6
|
Kiesch
LVF-Stammgast
![*](images/labview/lvfpip.gif) ![*](images/labview/lvfpip.gif) ![*](images/labview/lvfpip.gif)
Beiträge: 401
Registriert seit: Mar 2009
2019, 2018, 2016
2009
DE
04519
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
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*
|
|
|
24.02.2014, 12:38
|
Kiesch
LVF-Stammgast
![*](images/labview/lvfpip.gif) ![*](images/labview/lvfpip.gif) ![*](images/labview/lvfpip.gif)
Beiträge: 401
Registriert seit: Mar 2009
2019, 2018, 2016
2009
DE
04519
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
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*
|
|
|
| |