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 einbinden in CVI funktioniert nicht



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!

19.12.2008, 21:31
Beitrag #6

rolfk Offline
LVF-Guru
*****


Beiträge: 2.308
Registriert seit: Jun 2007

alle seit 6.0
1992
EN

2901GG
Niederlande
DLL einbinden in CVI funktioniert nicht
' schrieb:Ich hatte genau das selbe Problem.

Im Header meiner dll war ein Datentyp nicht bekannt, PSTCTR, das gab eine Fehlermeldung beim compilen.

Im Header der dll hab ich anschließend die windows.h includiert wodrin dieser Datentyp enthalten ist und anschließend eine neue *.LIB erstellt und es hat alles funktioniert.
Ein weiteres Problem was ich mit dieser dll hatte, vieleicht intressierts oder auch nicht, finde nur das war so ein kleiner holper Stein den man ruhig mal erzaehlen kann.

Tippfehler?? PSTCTR ist kein Windows Datentyp und kommt in meinem Ganzen Windows SDK nirgends vor. Meinst Du vielleicht etwas wie (L)PCTSTR? Das wäre ein Pointer auf ein constant string und je nachdem ob Du UNICODE defined hast oder nicht ein ASCII oder WIDECHAR String.

An sich ist es so dass ein Header File zu einer Library natürlich alle Datentypen die verwendet werden definieren sollte. Aber bei Libraries die in Windows application verwendet werden geht der Programmierer oft davon aus dass windows.h eh schon durch die Anwendung selber included wird.

Im Sinne der Kompatibilität mit späteren Versionen der Library ist es eine schlechte Idee um Header Files einer Library zu verändern. Wenn Du dann upgradest wirst Du das Header File meist auch ersetzen und dann hast Du schon ziemlich sicher vergessen dass Du die frühere Version selber angepasst hast. Besser wäre es vor dem Einbinden Deiner Header Datei ein #include <windows.h> innerhalb des Source Codes zu machen der Deine Library verwendet.
Zitat:Die dll ist in c++ geschrieben worden und ich hatte Probleme eine Funktion in meinem Code aufzurufen. Er erkannte diese einfach nicht, obwohl sie im Header stand.
Sah quasi so aus:
" int test(){xxxx}"
Wenn man jetzt " int test(void){xxxx}" schreibt erkennt der C compiler von cvi diese Funktion auch Big Grin

Nein! Er erkennt sie nicht sondern implementiert sie selber. Auch hier hast Du das Problem dass bei Ersetzen des Headers bei einem Update diese Funktion vielleicht geupdatet wurde Du aber in Deinem Source Code halt die alte Version noch verwendest.

Das Problem ist dass der Programmierer der Library leider vergessen hat die Funktionsdeklarationen als extern "C" zu deklarieren. Das verhindert dass der C++ Compiler diese Funktionsnamen dekoriert (myTest(x, y, z) wird dann zu sowas wie myTest$2%34ds%^sd() gemacht) und diese Funktion auch unter diesem Namen exportiert. Da die C++ Funktionsdekoration compilerspezifisch ist ist eine Library mit C++ exported Funktionsnamen im Grossen und Ganzen einfach blöder Quatsch.

Eine einfache Lösung dieses letzten Problems gibt es wirklich nicht.

Rolf Kalbermatter

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


Nachrichten in diesem Thema
DLL einbinden in CVI funktioniert nicht - rolfk - 19.12.2008 21:31

Gehe zu: