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 

DLL Import externe Struktur in Header bekommen



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!

29.09.2016, 20:56 (Dieser Beitrag wurde zuletzt bearbeitet: 29.09.2016 21:01 von rolfk.)
Beitrag #15

rolfk Offline
LVF-Guru
*****


Beiträge: 2.304
Registriert seit: Jun 2007

alle seit 6.0
1992
EN

2901GG
Niederlande
RE: DLL Import externe Struktur in Header bekommen
(28.09.2016 19:51 )hansi9990 schrieb:  Ja, ich habe die beiden Knoten ole32.dll CoTaskMemAlloc() und SebaHID.dll HID_Init() in einem VI zusammengefasst, im Header war der Init so definiert

[code] /**
\fn VOID HID_Init(struct strHidDevice* pstrHidDevice);

Siehst Du das VOID vor der Funktion? Das ist ein Microsoft alias für void und bedeutet, dass diese Funktion GAR NICHTS zurückgibt.

C ist tückisch: void alleine ist nichts, void* ist ein Pointer auf eine Speicherstelle ohne Typedefinition. Das heisst für einen C Compiler ist void* mit allen anderen Pointern kompatibel ohne dass man Typecasts machen muss. Ein nicht void* Pointer ist mit keinem anderen nicht void* Pointer kompatibel, und erfordert einen expliziten Cast um doch zugewiesen werden zu können.

Wenn vor der Funktion LPVOID oder PVOID stehen würde, hiesse das dass die Funktion einen void Pointer zurückgibt. Da die Funktion deklariert ist ohne Rückgabewert, setzt sie das EAX Register nicht explizit. Das heisst wenn Du LabVIEW sagst dass die Funktion etwas zurückgibt, dann liest LabVIEW halt das EAX Register das dann halt mit irgendeinem Wert beschrieben ist, hier scheinbar mit dem Pointer den Du als Parameter übergeben hast da die Funktion diesen scheinbar ins AEX Register kopiert um damit zu arbeiten. Nur kann eine Recompilation der DLL dies durchaus veränderen, entweder durch Änderungen im C Code selber, so dass der Compiler diesen Zeiger in ein anderes Register kopiert da das plötzlich effizienter ist mit Berücksichtigung von Cache, Multithreading und CPU Technologie und ein paar Dutzend andere Low-Level Details von denen Du nie im Leben etwas hören willst. Oder der DLL Bauer verwendet schlicht und einfach einen anderen Compiler oder Compilerversion, die andere Ideen hat wie der Code für optimale Performance erzeugt werden soll. Nur wenn die Funktion auch explizit deklariert und implementiert ist um einen Wert zurückzugeben kannst Du auch erwarten dass dort etwas sinnvolles zurückkommt.

Ich denke dass die Funktion im Prinzip schon etwas richtiges tut, nur scheinbar initialisiert sie nicht den ganzen Speicherbereich sondern nur ein paar Elemente die dem Entwickler wichtig erschienen. Schade dass er dabei vergessen hatte um auch gleich die OVERLAPPED Strukturen mitzuinitialisieren, wenn er denn schon von so einem Feature wie OVERLAPPED Gebrauch machen will.

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
Antwort schreiben 


Nachrichten in diesem Thema
RE: DLL Import externe Struktur in Header bekommen - rolfk - 29.09.2016 20:56

Möglicherweise verwandte Themen...
Themen Verfasser Antworten Views Letzter Beitrag
  USB Relay DLL import hansi9990 3 9.354 02.09.2019 09:15
Letzter Beitrag: hansi9990
  Aufruf externe DLL Fehler 1097 Lars_Tragl 1 8.982 11.08.2016 16:13
Letzter Beitrag: Freddy
  externe DLL verstehen sarah.bla 7 13.024 05.07.2016 08:19
Letzter Beitrag: sarah.bla
  Fehlende externe Funktion galilio 4 12.203 28.04.2016 12:42
Letzter Beitrag: rolfk
  aus einem Library Import Installer machen galilio 5 12.432 04.04.2016 09:32
Letzter Beitrag: galilio
  Labview Import / DLL debuggen galilio 36 49.857 10.11.2015 21:42
Letzter Beitrag: rolfk

Gehe zu: