eine fremde DLL in eigenes projekt einbinden
-
Du hast VS2005 EE ?
Was helfen betrifft kein Thema, dafür drück halt nen Auge zu wenn ich mich daneber formuliere - oder besser - hilf anderen wo es geht Hardwarenahe z.B. kann noch sehr hilfreich werden hier im Forum
-
ich habe die kostenlose version von Visual studio C++. du hast recht die windows.h ist nicht bei. hab mir die platform SDK runtergeladen. damit geht es.
@knuddelbaer
wenn du mal einen µC benutzen möchtest um irgendwas lustiges damit anzustellen. da kann ich schon eher helfen. dann kommst du aber nicht darum dich mit ASM zu beschäftigen
ich kenne leute die haben hochsprachen nurnoch für die oberfläche benutzt und den rest in ASM geschrieben, weil das um den faktor 100-10000 mal schneller ist
-
Assembler is ne weile her, Die 68k Familie.
Btw.: Auch andere im Forum können Deine Hilfe brauchen
-
hier im forum geht es ja nur um x86 ASM. da fehlt mir auch die erfahrung. beim PC finde ich es wichtiger, lesbaren code zu schreiben. natürlich soll er nicht zu langsam sein. ASM ist nun alles andere als leicht lesbar. es ist nicht unmöglich nur dauert es deutlich länger
und in der ASM Forumüberschrift wird erwähnt das man den lötkolben stecken lassen soll
-
xlomx schrieb:
so hab es jetzt hinbekommen.
musste wirklich die windows.h einbinden.
dazu musste ich aber die Plattform SDK von M§ runterladen und installieren, dann habe ich noch die verzeichnisse (include und lib) aus der SDK der IDE mitgeteilet. dann ging es.
Hi xlomx,
ich glaube ich habe exakt das gleiche Problem wie du.
Bin auch ein C++ Anfänger und möchte die "FTD2XX.dll" in meinem Projekt einbinden, und zwar in einer eigenen DLL.
Die Beispiele auf der FTDI-homepage sind ja bezogen auf die 2005er Express Edition leider veraltet...
Wie hast du es hinbekommen, diese unmanaged FTD2XX.dll in einem CLI-Projekt ans laufen zu bekommen?Du würdest mir einen Gefallen tun, wenn du mir das beschreiben könntest!
Je ausführlicher, desto besser.
Danke.Gruß
-
Hm, wieso sind die Beispiele veraltet ?
-
Gut, ob sie das alle sind will ich jetzt nicht behaupten, aber ich habe mir speziell das Beispiel 2 unter http://www.ftdichip.com/Projects/CodeExamples/VC++.htm angeschaut.
Für mein Verständnis ist dabei die Datei "devFTDI.h" für die Verwendung der FTDI-dll verantwortlich.
Und in dieser Datei steht schon in Zeile drei der Erste Begriff, den die aktuelle Express Edition nicht mehr kennt:public __gc class devFTDI
Soweit ich das jetzt herausbekommen habe, muss das neuerdings so heißen:
public ref class devFTDI
Da der compiler mich auch mit diversen Fehlern beglückt dachte ich halt, dass einige davon auch von geänderter Sprache sein könnten?
Vielleicht täusche ich mich auch...
Aber das werdet ihr micher sicherlich sagen können.
-
Ah ok, ich stand mal wieder auf dem Schlauch.
Details zu den Änderungen findest Du hier:
http://msdn2.microsoft.com/de-de/library/ms235289(VS.80).aspxDu kannst aber auch mal hier schauen:
Managed C++ to C++/CLI Conversion Tool from Microsoft
If you have larger source codes, which uses managed C++ (VC2003) and you want to move to VC2005 with the new syntax (C++/CLI) you now can use the new VC++ 2003 Managed Extensions to VC+2005 C+/CLI Conversion Toolhttp://blog.kalmbachnet.de/ => December 8, 2006
-
Die erste Seite kannte ich schon, trotzdem danke.
Das Tool werde ich mir mal genauer anschauen, und dann shcreiben was dabei rausgekommen ist.Aber ich hab das Gefühl, dass die ganzen Fehler nicht nur von den Sprachunterschieden sind, sondern ich auch noch was grundlegendes falsch mache...
Die windows.h habe ich auch nicht auf dem Rechner, und wenn ich nach "Platform SDK" bei MS suche, dann kommt eine 404-Fehlermeldung.
Wo und wie bekomme ich die windows.h (und vll noch andere notwendige Dateien) auf den Rechner, wenn diese nicht bei der Express Edition mit dabei sind?Ich hoffe ja auch noch auf die Beschreibung von xlomx wie die Lösung war, wäre klasse!
Gruß
-
-
hi nibbler
die platform sdk brauchst du erstmal, sonst geht es nicht.
ich kann dir leider erst am montag schreiben, wie ich es genau gemacht habe.
also mit code und so.aber grob kann ich sagen, ich habe eine managed C++/CLI klasse erstellt. und in dieser habe ich dann dynamisch auf die FTDI2XX.dll gelinkt.
dazu habe ich die .h datei von FTDI included und beim linker die .lib angegeben. mit den in der header-datei angegebenen funktionen bediene ich dann die USB-Schnittstelle. Solange du nicht den FT232 programmieren möchtest ist die Dokumentation von der FTDI homepage relativ einfach. man kann die Beispiele öffnen, lesen, schreiben, schließen auch direkt per copy&paste übernehmen, nur kleinigkeiten sind zu ändern, die hauptsächlich wegen uni-code sind. den FTHandler musst du als Zeiger deklarieren. sonst akzeptiert der compiler das nicht.
Ich finde M$ hat das mit den unmanaged und managed code mischen gut gelöst. man muss nur kleinigkeiten wissen damit es funktioniert.montag werd ich nochmal genauer schreiben wie ich es gemacht habe. schaffst du es ja auch mit den informationen.
-
Ok, das Platform SDK lade ich gerade runter, werde das dann gleich installieren.
ich kann dir leider erst am montag schreiben, wie ich es genau gemacht habe.
also mit code und so.Wenn du das präziser erklären kannst (auch an welchen Stellen im Menü die .lib und die .dll angegeben werden müssen - ich hab da keine Ahnung von), wäre nett.
Ich habe noch keinen richtigen Durchblick...Programmieren will ich den FT232 nicht, nur benutzen.
Klar, Änderungen der Baudrate zB müssen schon gehen, aber das verstehe ich nicht unter programmieren.den FTHandler musst du als Zeiger deklarieren. sonst akzeptiert der compiler das nicht.
FTHandler, Zeiger... Ich verstehe nichts
Dann bin ich jetzt mal gespannt auf die genauere Erklärung!
Gruß
-
So, das Platform SDK ist installiert, und soweit ich das sehen kann sind auch die Verzeichnise davon in der Express Edition eingetragen.
Waren sie aber automatisch.Was mein Projekt angeht macht das allerdings keinen Unterschied, ich bekomme weiterhin 156 Fehler - alle bezüglich der "FTD2XX.h".
Ob ich die "windows.h" mit #include "<windows.h> hin schreibe oder nicht, es kommt auf das gleiche raus: 156 Fehler.
Wenn es euch hilft, kann ich auch mal die Compiler-Fehlermeldungen posten?!?[EDIT: Ich poste einfach mal die Fehlermeldungen, vielleicht versteht ihr die ja?]
By the way....: windows.h und CLI - gehört das überhaupt zusammen??
..\FTD2XX.h(52) : error C2146: Syntaxfehler: Fehlendes ';' vor Bezeichner 'FT_HANDLE' ..\FTD2XX.h(52) : error C4430: Fehlender Typspezifizierer - int wird angenommen. Hinweis: "default-int" wird von C++ nicht unterstützt. ..\FTD2XX.h(52) : error C4430: Fehlender Typspezifizierer - int wird angenommen. Hinweis: "default-int" wird von C++ nicht unterstützt. ..\FTD2XX.h(53) : error C2146: Syntaxfehler: Fehlendes ';' vor Bezeichner 'FT_STATUS' ..\FTD2XX.h(53) : error C4430: Fehlender Typspezifizierer - int wird angenommen. Hinweis: "default-int" wird von C++ nicht unterstützt. ..\FTD2XX.h(53) : error C4430: Fehlender Typspezifizierer - int wird angenommen. Hinweis: "default-int" wird von C++ nicht unterstützt. ..\FTD2XX.h(167) : error C2065: 'DWORD': nichtdeklarierter Bezeichner ..\FTD2XX.h(167) : error C2513: 'void *': Keine Variable vor '=' deklariert ..\FTD2XX.h(201) : error C2146: Syntaxfehler: Fehlendes ';' vor Bezeichner 'WINAPI' ..\FTD2XX.h(201) : error C4430: Fehlender Typspezifizierer - int wird angenommen. Hinweis: "default-int" wird von C++ nicht unterstützt. ..\FTD2XX.h(201) : error C2370: 'FT_STATUS': Neudefinition; unterschiedliche Speicherklassen ..\FTD2XX.h(53): Siehe Deklaration von 'FT_STATUS' ..\FTD2XX.h(201) : error C2146: Syntaxfehler: Fehlendes ';' vor Bezeichner 'FT_Open' ..\FTD2XX.h(201) : error C4430: Fehlender Typspezifizierer - int wird angenommen. Hinweis: "default-int" wird von C++ nicht unterstützt. ..\FTD2XX.h(203) : error C2061: Syntaxfehler: Bezeichner 'FT_HANDLE' ..\FTD2XX.h(204) : error C4430: Fehlender Typspezifizierer - int wird angenommen. Hinweis: "default-int" wird von C++ nicht unterstützt. ..\FTD2XX.h(207) : error C2146: Syntaxfehler: Fehlendes ';' vor Bezeichner 'WINAPI' ..\FTD2XX.h(207) : error C4430: Fehlender Typspezifizierer - int wird angenommen. Hinweis: "default-int" wird von C++ nicht unterstützt. ..\FTD2XX.h(207) : error C2370: 'FT_STATUS': Neudefinition; unterschiedliche Speicherklassen ..\FTD2XX.h(53): Siehe Deklaration von 'FT_STATUS' ..\FTD2XX.h(207) : error C2146: Syntaxfehler: Fehlendes ';' vor Bezeichner 'FT_OpenEx' ..\FTD2XX.h(207) : error C4430: Fehlender Typspezifizierer - int wird angenommen. Hinweis: "default-int" wird von C++ nicht unterstützt. ..\FTD2XX.h(207) : error C2086: 'int WINAPI': Neudefinition ..\FTD2XX.h(201): Siehe Deklaration von 'WINAPI' ..\FTD2XX.h(209) : error C2061: Syntaxfehler: Bezeichner 'DWORD' ..\FTD2XX.h(211) : error C4430: Fehlender Typspezifizierer - int wird angenommen. Hinweis: "default-int" wird von C++ nicht unterstützt. ..\FTD2XX.h(214) : error C2146: Syntaxfehler: Fehlendes ';' vor Bezeichner 'WINAPI' ..\FTD2XX.h(214) : error C4430: Fehlender Typspezifizierer - int wird angenommen. Hinweis: "default-int" wird von C++ nicht unterstützt. ..\FTD2XX.h(214) : error C2370: 'FT_STATUS': Neudefinition; unterschiedliche Speicherklassen ..\FTD2XX.h(53): Siehe Deklaration von 'FT_STATUS' ..\FTD2XX.h(214) : error C2146: Syntaxfehler: Fehlendes ';' vor Bezeichner 'FT_ListDevices' ..\FTD2XX.h(214) : error C4430: Fehlender Typspezifizierer - int wird angenommen. Hinweis: "default-int" wird von C++ nicht unterstützt. ..\FTD2XX.h(214) : error C2086: 'int WINAPI': Neudefinition ..\FTD2XX.h(201): Siehe Deklaration von 'WINAPI' ..\FTD2XX.h(217) : error C2061: Syntaxfehler: Bezeichner 'DWORD' ..\FTD2XX.h(218) : error C4430: Fehlender Typspezifizierer - int wird angenommen. Hinweis: "default-int" wird von C++ nicht unterstützt. ..\FTD2XX.h(221) : error C2146: Syntaxfehler: Fehlendes ';' vor Bezeichner 'WINAPI' ..\FTD2XX.h(221) : error C4430: Fehlender Typspezifizierer - int wird angenommen. Hinweis: "default-int" wird von C++ nicht unterstützt. ..\FTD2XX.h(221) : error C2370: 'FT_STATUS': Neudefinition; unterschiedliche Speicherklassen ..\FTD2XX.h(53): Siehe Deklaration von 'FT_STATUS' ..\FTD2XX.h(221) : error C2146: Syntaxfehler: Fehlendes ';' vor Bezeichner 'FT_Close' ..\FTD2XX.h(221) : error C4430: Fehlender Typspezifizierer - int wird angenommen. Hinweis: "default-int" wird von C++ nicht unterstützt. ..\FTD2XX.h(221) : error C2086: 'int WINAPI': Neudefinition ..\FTD2XX.h(201): Siehe Deklaration von 'WINAPI' ..\FTD2XX.h(223) : error C2146: Syntaxfehler: Fehlendes ')' vor Bezeichner 'ftHandle' ..\FTD2XX.h(223) : error C4430: Fehlender Typspezifizierer - int wird angenommen. Hinweis: "default-int" wird von C++ nicht unterstützt. ..\FTD2XX.h(223) : error C2059: Syntaxfehler: ')' ..\FTD2XX.h(226) : error C2146: Syntaxfehler: Fehlendes ';' vor Bezeichner 'WINAPI' ..\FTD2XX.h(226) : error C4430: Fehlender Typspezifizierer - int wird angenommen. Hinweis: "default-int" wird von C++ nicht unterstützt. ..\FTD2XX.h(226) : error C2370: 'FT_STATUS': Neudefinition; unterschiedliche Speicherklassen ..\FTD2XX.h(53): Siehe Deklaration von 'FT_STATUS' ..\FTD2XX.h(226) : error C2146: Syntaxfehler: Fehlendes ';' vor Bezeichner 'FT_Read' ..\FTD2XX.h(226) : error C4430: Fehlender Typspezifizierer - int wird angenommen. Hinweis: "default-int" wird von C++ nicht unterstützt. ..\FTD2XX.h(226) : error C2086: 'int WINAPI': Neudefinition ..\FTD2XX.h(201): Siehe Deklaration von 'WINAPI' ..\FTD2XX.h(227) : error C2146: Syntaxfehler: Fehlendes ')' vor Bezeichner 'ftHandle' ..\FTD2XX.h(227) : error C4430: Fehlender Typspezifizierer - int wird angenommen. Hinweis: "default-int" wird von C++ nicht unterstützt. ..\FTD2XX.h(231) : error C2059: Syntaxfehler: ')' ..\FTD2XX.h(234) : error C2146: Syntaxfehler: Fehlendes ';' vor Bezeichner 'WINAPI' ..\FTD2XX.h(234) : error C4430: Fehlender Typspezifizierer - int wird angenommen. Hinweis: "default-int" wird von C++ nicht unterstützt. ..\FTD2XX.h(234) : error C2370: 'FT_STATUS': Neudefinition; unterschiedliche Speicherklassen ..\FTD2XX.h(53): Siehe Deklaration von 'FT_STATUS' ..\FTD2XX.h(234) : error C2146: Syntaxfehler: Fehlendes ';' vor Bezeichner 'FT_Write' ..\FTD2XX.h(234) : error C4430: Fehlender Typspezifizierer - int wird angenommen. Hinweis: "default-int" wird von C++ nicht unterstützt. ..\FTD2XX.h(234) : error C2086: 'int WINAPI': Neudefinition ..\FTD2XX.h(201): Siehe Deklaration von 'WINAPI' ..\FTD2XX.h(235) : error C2146: Syntaxfehler: Fehlendes ')' vor Bezeichner 'ftHandle' ..\FTD2XX.h(235) : error C4430: Fehlender Typspezifizierer - int wird angenommen. Hinweis: "default-int" wird von C++ nicht unterstützt. ..\FTD2XX.h(239) : error C2059: Syntaxfehler: ')' ..\FTD2XX.h(242) : error C2146: Syntaxfehler: Fehlendes ';' vor Bezeichner 'WINAPI' ..\FTD2XX.h(242) : error C4430: Fehlender Typspezifizierer - int wird angenommen. Hinweis: "default-int" wird von C++ nicht unterstützt. ..\FTD2XX.h(242) : error C2370: 'FT_STATUS': Neudefinition; unterschiedliche Speicherklassen ..\FTD2XX.h(53): Siehe Deklaration von 'FT_STATUS' ..\FTD2XX.h(242) : error C2146: Syntaxfehler: Fehlendes ';' vor Bezeichner 'FT_IoCtl' ..\FTD2XX.h(242) : error C4430: Fehlender Typspezifizierer - int wird angenommen. Hinweis: "default-int" wird von C++ nicht unterstützt. ..\FTD2XX.h(242) : error C2086: 'int WINAPI': Neudefinition ..\FTD2XX.h(201): Siehe Deklaration von 'WINAPI' ..\FTD2XX.h(243) : error C2146: Syntaxfehler: Fehlendes ')' vor Bezeichner 'ftHandle' ..\FTD2XX.h(243) : error C4430: Fehlender Typspezifizierer - int wird angenommen. Hinweis: "default-int" wird von C++ nicht unterstützt. ..\FTD2XX.h(251) : error C2059: Syntaxfehler: ')' ..\FTD2XX.h(254) : error C2146: Syntaxfehler: Fehlendes ';' vor Bezeichner 'WINAPI' ..\FTD2XX.h(254) : error C4430: Fehlender Typspezifizierer - int wird angenommen. Hinweis: "default-int" wird von C++ nicht unterstützt. ..\FTD2XX.h(254) : error C2370: 'FT_STATUS': Neudefinition; unterschiedliche Speicherklassen ..\FTD2XX.h(53): Siehe Deklaration von 'FT_STATUS' ..\FTD2XX.h(254) : error C2146: Syntaxfehler: Fehlendes ';' vor Bezeichner 'FT_SetBaudRate' ..\FTD2XX.h(254) : error C4430: Fehlender Typspezifizierer - int wird angenommen. Hinweis: "default-int" wird von C++ nicht unterstützt. ..\FTD2XX.h(254) : error C2086: 'int WINAPI': Neudefinition ..\FTD2XX.h(201): Siehe Deklaration von 'WINAPI' ..\FTD2XX.h(255) : error C2146: Syntaxfehler: Fehlendes ')' vor Bezeichner 'ftHandle' ..\FTD2XX.h(255) : error C4430: Fehlender Typspezifizierer - int wird angenommen. Hinweis: "default-int" wird von C++ nicht unterstützt. ..\FTD2XX.h(257) : error C2059: Syntaxfehler: ')' ..\FTD2XX.h(260) : error C2146: Syntaxfehler: Fehlendes ';' vor Bezeichner 'WINAPI' ..\FTD2XX.h(260) : error C4430: Fehlender Typspezifizierer - int wird angenommen. Hinweis: "default-int" wird von C++ nicht unterstützt. ..\FTD2XX.h(260) : error C2370: 'FT_STATUS': Neudefinition; unterschiedliche Speicherklassen ..\FTD2XX.h(53): Siehe Deklaration von 'FT_STATUS' ..\FTD2XX.h(260) : error C2146: Syntaxfehler: Fehlendes ';' vor Bezeichner 'FT_SetDivisor' ..\FTD2XX.h(260) : error C4430: Fehlender Typspezifizierer - int wird angenommen. Hinweis: "default-int" wird von C++ nicht unterstützt. ..\FTD2XX.h(260) : error C2086: 'int WINAPI': Neudefinition ..\FTD2XX.h(201): Siehe Deklaration von 'WINAPI' ..\FTD2XX.h(261) : error C2146: Syntaxfehler: Fehlendes ')' vor Bezeichner 'ftHandle' ..\FTD2XX.h(261) : error C4430: Fehlender Typspezifizierer - int wird angenommen. Hinweis: "default-int" wird von C++ nicht unterstützt. ..\FTD2XX.h(263) : error C2059: Syntaxfehler: ')' ..\FTD2XX.h(266) : error C2146: Syntaxfehler: Fehlendes ';' vor Bezeichner 'WINAPI' ..\FTD2XX.h(266) : error C4430: Fehlender Typspezifizierer - int wird angenommen. Hinweis: "default-int" wird von C++ nicht unterstützt. ..\FTD2XX.h(266) : error C2370: 'FT_STATUS': Neudefinition; unterschiedliche Speicherklassen ..\FTD2XX.h(53): Siehe Deklaration von 'FT_STATUS' ..\FTD2XX.h(266) : error C2146: Syntaxfehler: Fehlendes ';' vor Bezeichner 'FT_SetDataCharacteristics' ..\FTD2XX.h(266) : error C4430: Fehlender Typspezifizierer - int wird angenommen. Hinweis: "default-int" wird von C++ nicht unterstützt. ..\FTD2XX.h(266) : error C2086: 'int WINAPI': Neudefinition ..\FTD2XX.h(201): Siehe Deklaration von 'WINAPI' ..\FTD2XX.h(267) : error C2146: Syntaxfehler: Fehlendes ')' vor Bezeichner 'ftHandle' ..\FTD2XX.h(267) : error C4430: Fehlender Typspezifizierer - int wird angenommen. Hinweis: "default-int" wird von C++ nicht unterstützt. ..\FTD2XX.h(271) : error C2059: Syntaxfehler: ')' ..\FTD2XX.h(274) : error C2146: Syntaxfehler: Fehlendes ';' vor Bezeichner 'WINAPI' ..\FTD2XX.h(274) : error C4430: Fehlender Typspezifizierer - int wird angenommen. Hinweis: "default-int" wird von C++ nicht unterstützt. ..\FTD2XX.h(274) : error C2370: 'FT_STATUS': Neudefinition; unterschiedliche Speicherklassen ..\FTD2XX.h(53): Siehe Deklaration von 'FT_STATUS' ..\FTD2XX.h(274) : error C2146: Syntaxfehler: Fehlendes ';' vor Bezeichner 'FT_SetFlowControl' ..\FTD2XX.h(274) : error C4430: Fehlender Typspezifizierer - int wird angenommen. Hinweis: "default-int" wird von C++ nicht unterstützt. ..\FTD2XX.h(274) : error C2086: 'int WINAPI': Neudefinition ..\FTD2XX.h(201): Siehe Deklaration von 'WINAPI' ..\FTD2XX.h(275) : error C2146: Syntaxfehler: Fehlendes ')' vor Bezeichner 'ftHandle' ..\FTD2XX.h(275) : error C4430: Fehlender Typspezifizierer - int wird angenommen. Hinweis: "default-int" wird von C++ nicht unterstützt. ..\FTD2XX.h(279) : error C2059: Syntaxfehler: ')' ..\FTD2XX.h(282) : error C2146: Syntaxfehler: Fehlendes ';' vor Bezeichner 'WINAPI' ..\FTD2XX.h(282) : error C4430: Fehlender Typspezifizierer - int wird angenommen. Hinweis: "default-int" wird von C++ nicht unterstützt. ..\FTD2XX.h(282) : error C2370: 'FT_STATUS': Neudefinition; unterschiedliche Speicherklassen ..\FTD2XX.h(53): Siehe Deklaration von 'FT_STATUS' ..\FTD2XX.h(282) : error C2146: Syntaxfehler: Fehlendes ';' vor Bezeichner 'FT_ResetDevice' ..\FTD2XX.h(282) : error C4430: Fehlender Typspezifizierer - int wird angenommen. Hinweis: "default-int" wird von C++ nicht unterstützt. ..\FTD2XX.h(282) : error C2086: 'int WINAPI': Neudefinition ..\FTD2XX.h(201): Siehe Deklaration von 'WINAPI' ..\FTD2XX.h(284) : error C2146: Syntaxfehler: Fehlendes ')' vor Bezeichner 'ftHandle' ..\FTD2XX.h(284) : error C4430: Fehlender Typspezifizierer - int wird angenommen. Hinweis: "default-int" wird von C++ nicht unterstützt. ..\FTD2XX.h(284) : error C2059: Syntaxfehler: ')' ..\FTD2XX.h(287) : error C2146: Syntaxfehler: Fehlendes ';' vor Bezeichner 'WINAPI' ..\FTD2XX.h(287) : error C4430: Fehlender Typspezifizierer - int wird angenommen. Hinweis: "default-int" wird von C++ nicht unterstützt. ..\FTD2XX.h(287) : error C2370: 'FT_STATUS': Neudefinition; unterschiedliche Speicherklassen ..\FTD2XX.h(53): Siehe Deklaration von 'FT_STATUS' ..\FTD2XX.h(287) : error C2146: Syntaxfehler: Fehlendes ';' vor Bezeichner 'FT_SetDtr' ..\FTD2XX.h(287) : error C4430: Fehlender Typspezifizierer - int wird angenommen. Hinweis: "default-int" wird von C++ nicht unterstützt. ..\FTD2XX.h(287) : error C2086: 'int WINAPI': Neudefinition ..\FTD2XX.h(201): Siehe Deklaration von 'WINAPI' ..\FTD2XX.h(289) : error C2146: Syntaxfehler: Fehlendes ')' vor Bezeichner 'ftHandle' ..\FTD2XX.h(289) : error C4430: Fehlender Typspezifizierer - int wird angenommen. Hinweis: "default-int" wird von C++ nicht unterstützt. ..\FTD2XX.h(289) : error C2059: Syntaxfehler: ')' ..\FTD2XX.h(292) : error C2146: Syntaxfehler: Fehlendes ';' vor Bezeichner 'WINAPI' ..\FTD2XX.h(292) : error C4430: Fehlender Typspezifizierer - int wird angenommen. Hinweis: "default-int" wird von C++ nicht unterstützt. ..\FTD2XX.h(292) : error C2370: 'FT_STATUS': Neudefinition; unterschiedliche Speicherklassen ..\FTD2XX.h(53): Siehe Deklaration von 'FT_STATUS' ..\FTD2XX.h(292) : error C2146: Syntaxfehler: Fehlendes ';' vor Bezeichner 'FT_ClrDtr' ..\FTD2XX.h(292) : error C4430: Fehlender Typspezifizierer - int wird angenommen. Hinweis: "default-int" wird von C++ nicht unterstützt. ..\FTD2XX.h(292) : error C2086: 'int WINAPI': Neudefinition ..\FTD2XX.h(201): Siehe Deklaration von 'WINAPI' ..\FTD2XX.h(294) : error C2146: Syntaxfehler: Fehlendes ')' vor Bezeichner 'ftHandle' ..\FTD2XX.h(294) : error C4430: Fehlender Typspezifizierer - int wird angenommen. Hinweis: "default-int" wird von C++ nicht unterstützt. ..\FTD2XX.h(294) : error C2059: Syntaxfehler: ')' ..\FTD2XX.h(297) : error C2146: Syntaxfehler: Fehlendes ';' vor Bezeichner 'WINAPI' ..\FTD2XX.h(297) : error C4430: Fehlender Typspezifizierer - int wird angenommen. Hinweis: "default-int" wird von C++ nicht unterstützt. ..\FTD2XX.h(297) : error C2370: 'FT_STATUS': Neudefinition; unterschiedliche Speicherklassen ..\FTD2XX.h(53): Siehe Deklaration von 'FT_STATUS' ..\FTD2XX.h(297) : error C2146: Syntaxfehler: Fehlendes ';' vor Bezeichner 'FT_SetRts' ..\FTD2XX.h(297) : error C4430: Fehlender Typspezifizierer - int wird angenommen. Hinweis: "default-int" wird von C++ nicht unterstützt. ..\FTD2XX.h(297) : error C2086: 'int WINAPI': Neudefinition ..\FTD2XX.h(201): Siehe Deklaration von 'WINAPI' ..\FTD2XX.h(299) : error C2146: Syntaxfehler: Fehlendes ')' vor Bezeichner 'ftHandle' ..\FTD2XX.h(299) : error C4430: Fehlender Typspezifizierer - int wird angenommen. Hinweis: "default-int" wird von C++ nicht unterstützt. ..\FTD2XX.h(299) : error C2059: Syntaxfehler: ')' ..\FTD2XX.h(302) : error C2146: Syntaxfehler: Fehlendes ';' vor Bezeichner 'WINAPI' ..\FTD2XX.h(302) : error C4430: Fehlender Typspezifizierer - int wird angenommen. Hinweis: "default-int" wird von C++ nicht unterstützt. ..\FTD2XX.h(302) : error C2370: 'FT_STATUS': Neudefinition; unterschiedliche Speicherklassen ..\FTD2XX.h(53): Siehe Deklaration von 'FT_STATUS' ..\FTD2XX.h(302) : error C2146: Syntaxfehler: Fehlendes ';' vor Bezeichner 'FT_ClrRts' ..\FTD2XX.h(302) : error C4430: Fehlender Typspezifizierer - int wird angenommen. Hinweis: "default-int" wird von C++ nicht unterstützt. ..\FTD2XX.h(302) : error C2086: 'int WINAPI': Neudefinition ..\FTD2XX.h(201): Siehe Deklaration von 'WINAPI' ..\FTD2XX.h(304) : error C2146: Syntaxfehler: Fehlendes ')' vor Bezeichner 'ftHandle' ..\FTD2XX.h(304) : error C4430: Fehlender Typspezifizierer - int wird angenommen. Hinweis: "default-int" wird von C++ nicht unterstützt. ..\FTD2XX.h(304) : error C2059: Syntaxfehler: ')' ..\FTD2XX.h(307) : error C2146: Syntaxfehler: Fehlendes ';' vor Bezeichner 'WINAPI' ..\FTD2XX.h(307) : error C4430: Fehlender Typspezifizierer - int wird angenommen. Hinweis: "default-int" wird von C++ nicht unterstützt. ..\FTD2XX.h(307) : error C2370: 'FT_STATUS': Neudefinition; unterschiedliche Speicherklassen ..\FTD2XX.h(53): Siehe Deklaration von 'FT_STATUS' ..\FTD2XX.h(307) : error C2146: Syntaxfehler: Fehlendes ';' vor Bezeichner 'FT_GetModemStatus' ..\FTD2XX.h(307) : error C4430: Fehlender Typspezifizierer - int wird angenommen. Hinweis: "default-int" wird von C++ nicht unterstützt. ..\FTD2XX.h(307) : error C2086: 'int WINAPI': Neudefinition ..\FTD2XX.h(201): Siehe Deklaration von 'WINAPI' ..\FTD2XX.h(308) : error C2146: Syntaxfehler: Fehlendes ')' vor Bezeichner 'ftHandle' ..\FTD2XX.h(308) : fatal error C1003: Mehr als 100 Fehler gefunden; Kompilierung wird abgebrochen.
-
Ich bin am verzweifeln, probiere hin und her, aber komme seit einem Tag nicht weiter.
Ich poste euch mal die Zeilen 52 und 53, die für die ersten compiler-Fehler verantwortlich sind.
Die Fehlermeldungen stehen im vorherigen post.Kann mir bitte jemand sagen, was ich da wo ändern muss? Danke.
typedef PVOID FT_HANDLE; typedef ULONG FT_STATUS;
-
hi
ok, versuch mal unter "Extras/Optionen" bei den "Projekte und Projektmappen/VC++Verzeichnisse" die SDK-Verzeichnisse hinzuzufügen.
bei mir waren es unter Win32 Includedateien,
C:\Programme\Microsoft Platform SDK for Windows Server 2003 R2\Include
bei Win32 Bibliotheksdateien,
C:\Programme\Microsoft Platform SDK for Windows Server 2003 R2\Lib
und bei Win32 Ausführbare Dateien,
C:\Programme\Microsoft Platform SDK for Windows Server 2003 R2\Bindie windows.h kannst du auch unter den Inlcude-verzeichniss suchen. muss irgendwo drin sein.
void geräteanzeigen() { FT_STATUS ftStatus; char *BufPtrs[3]; // pointer to array of 3 pointers char Buffer1[64]; // buffer for product description of first device found char Buffer2[64]; // buffer for product description of second device DWORD numDevs; // initialize the array of pointers BufPtrs[0] = Buffer1; BufPtrs[1] = Buffer2; BufPtrs[2] = NULL; // last entry should be NULL ftStatus = FT_ListDevices(BufPtrs,&numDevs,FT_LIST_ALL|FT_OPEN_BY_DESCRIPTION); if (FT_SUCCESS(ftStatus)) { std::string Test; Test=Buffer1; if (Test=="Mein_Gerät") { ÖffneGerät(); } // FT_ListDevices OK, product descriptions are in Buffer1 and Buffer2, and // numDevs contains the number of devices connected } else { // FT_ListDevices failed } }
mit der Funktion gucke ich ob ein Gerät namens "Mein_Gerät" vorhanden ist. wie du schon siehst, praktisch 1 zu 1 aus der dokumentation übernommen.
FT_HANDLE ftHandle; void ÖffneGerät() { FT_STATUS ftStatus; FT_HANDLE ftHandle1; ftStatus = FT_OpenEx("Mein_Gerät",FT_OPEN_BY_DESCRIPTION,&ftHandle1); ftHandle=ftHandle1; if (ftStatus == FT_OK) { FT_SetBaudRate(ftHandle1,9600); FT_SetDataCharacteristics(ftHandle1,FT_BITS_8,FT_STOP_BITS_1,FT_PARITY_NONE); FT_SetFlowControl(ftHandle1,FT_FLOW_NONE,'x','y'); // FT_OpenEx OK, device with description "Mein_Gerät" is open } else { System::Windows::Forms::MessageBox::Show("Das Mein_Gerät konnte nicht geöffnet werden!","USB",System::Windows::Forms::MessageBoxButtons::OK,System::Windows::Forms::MessageBoxIcon::Error); } }
Der Schnipsel öffnet dann Mein_Gerät und der FTHandler wird doch nicht mit einen zeiger angelegt, habe mich falsch erinnert
void Schreiben(String^ Befehl) { int länge=Befehl->Length; pin_ptr<const wchar_t> wch = PtrToStringChars(Befehl); size_t origsize = wcslen(wch) + 1; const size_t newsize = 100; size_t convertedChars = 0; char nstring[newsize]; wcstombs_s(&convertedChars, nstring, origsize, wch, _TRUNCATE); DWORD written; //zusenden->=Befehl->ToCharArray(); FT_Write(ftHandle,nstring,länge,&written); }
Mit den Ding kannst du dann schreiben. Sieht etwas komplizierter aus wegen der umsetzung von Unicode Strings in Ansi-Strings
String^ USBRead() { FT_STATUS ftStatus; DWORD EventDWord; DWORD RxBytes; DWORD TxBytes; DWORD BytesReceived; char RxBuffer[512]=""; FT_GetStatus(ftHandle,&RxBytes,&TxBytes,&EventDWord); if (RxBytes > 0) { ftStatus = FT_Read(ftHandle,RxBuffer,RxBytes,&BytesReceived); if (ftStatus == FT_OK) { String^ s=gcnew String(RxBuffer); return(s); } else { return(""); } } String^ s=gcnew String(RxBuffer); return(s); }
und das ding nun zu lesen. Da USB keinen richtigen interruptbetrieb kennt musst du Pollen. Mir ist noch nichts besseres eingefallen.
achso die .lib musst du unter Projekt/...projekteigenschaften eintragen. genauer : bei Konfigurationseigenschaften/Linker/Eingabe , Zusätzliche Abhängigkeiten
-
Hi, und danke für die Antwort.
Das mit den Verzeichnissen eintragen habe ich schließlich heute irgendwie geschafft.
Wie und wo ich jetzt deinen code einfügen muss um ihn zu nutzen ist mir allerdings nicht klar...
-
ich weiß nicht ob einfaches einfügen reicht.
Das sind methoden einer klasse. welche private oder public sind musst du entscheiden. das sind zumindest die methoden die in meiner klasse die komunikation erledigen.
-
Ich versuche ja die in eine DLL einzufügen.
Die Funktionen der FTDI-Dll sollen da mit rein, noch andere dabei.
Aber erstmal die FTDI-DLL ans laufen bekommen...In dem header meiner dll steht jetzt
public ref class Class1{ public: void geräteanzeigen(); };
In der cpp der dll habe ich deine zwei Funktionen "geräteanzeigen" und "öffneGerät" zusammengeschmissen und rein kopiert:
void Class1::geräteanzeigen() { FT_STATUS ftStatus; char *BufPtrs[3]; // pointer to array of 3 pointers char Buffer1[64]; // buffer for product description of first device found char Buffer2[64]; // buffer for product description of second device DWORD numDevs; // initialize the array of pointers BufPtrs[0] = Buffer1; BufPtrs[1] = Buffer2; BufPtrs[2] = NULL; // last entry should be NULL ftStatus = FT_ListDevices(BufPtrs,&numDevs,FT_LIST_ALL|FT_OPEN_BY_DESCRIPTION); if (FT_SUCCESS(ftStatus)) { std::string Test; Test=Buffer1; if (Test=="Mein_Gerät") { //ÖffneGerät(); FT_HANDLE ftHandle; FT_STATUS ftStatus; FT_HANDLE ftHandle1; ftStatus = FT_OpenEx("Mein_Gerät",FT_OPEN_BY_DESCRIPTION,&ftHandle1); ftHandle=ftHandle1; if (ftStatus == FT_OK) { FT_SetBaudRate(ftHandle1,9600); FT_SetDataCharacteristics(ftHandle1,FT_BITS_8,FT_STOP_BITS_1,FT_PARITY_NONE); FT_SetFlowControl(ftHandle1,FT_FLOW_NONE,'x','y'); // FT_OpenEx OK, device with description "Mein_Gerät" is open } else { //System::Windows::Forms::MessageBox::Show("Das Mein_Gerät konnte nicht geöffnet werden!","USB",System::Windows::Forms::MessageBoxButtons::OK,System::Windows::Forms::MessageBoxIcon::Error); } } // FT_ListDevices OK, product descriptions are in Buffer1 and Buffer2, and // numDevs contains the number of devices connected } else { // FT_ListDevices failed } };
In dem Forms-Projekt, welches meine DLL nutzen soll, will ich dann die Funktion mit dem Geräte-anzeigen aus der DLL ansprechen, aber bekomme das nicht hin.
Wegen der Fehlermeldung habe ich das dann mit nem Delegaten (was auch immer das ist) versucht, aber das klappte auch nicht - daher wieder auskommentiert.private: System::Void btnCheck_Click(System::Object^ sender, System::EventArgs^ e) { MeineDLL::Class1::geräteanzeigen(); //public delegate void MyDelegate(); //MeineDLL::Class1 ^class1 = gcnew MeineDLL::Class1; //MyDelegate ^StaticDelInst = gcnew MyDelegate(class1, &MeineDLL::Class1:geräteanzeigen); }
Wie kann ich das jetzt in dem Forms-Projekt (da steht der code hier in der .h) ansprechen?
[EDIT: ] Compilerfehlermeldung: [/EDIT]
error C2352: 'MeineDLL::Class1::geräteanzeigen': Unzulässiger Aufruf einer nicht statischen Memberfunktion
-
Na, Du musst schon eine Instanz Deiner Klasse verwenden!!!
-
Knuddlbaer schrieb:
Na, Du musst schon eine Instanz Deiner Klasse verwenden!!!
Ich sag es ungern, aber ich weiß nciht was damit gemeint ist oder wie das geht...