eine fremde DLL in eigenes projekt einbinden





  • 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\Bin

    die 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... 😞



  • ...

    MeineDLL::Class1 ^ meineklasse = gcnew MeineDLL::Class1();
    


  • Hi nibbler

    du musst dir erstmal eine art variable erstellen die deine klasse reprensentiert.

    also
    [cpp]
    MeineDLL::Class1^ gerät1=MeineDLL::Class1();
    //dann geht
    gerät1::geräteanzeigen();
    [cpp]



  • Ja, sorry knuddelbaer, ich hätte erst suchen sollen...

    Habe bei der Suche dann den thread hier gefunden:
    http://www.c-plusplus.net/forum/viewtopic-var-p-is-1229088.html#1229088

    Und daher folgendes probiert:

    MeineDLL::Class1 klasse;
    klasse.geräteanzeigen();
    

    Jetzt lässt sich alles kompilieren.
    Aber scheinbar gehts noch nicht ganz, ich muss das mal debuggen...



  • Ja, sorry knuddelbaer, ich hätte erst suchen sollen...

    Na, geht weniger um das suchen, mehr um das: Da fehlen grundlegende Grundlagen. Ich finde an dieser Stelle die Implementierung einer DLL , am besten noch mit P/Invoke etwas an den Kentnissen vorbei.

    MeineDLL::Class1^ gerät1=MeineDLL::Class1(); 
    //dann geht 
    gerät1::geräteanzeigen();
    

    Das ist auch unsinn.



  • Ja, Grundlagen fehlen mir, da mache ich auch keinen Hehl draus.
    Wenn das soweit erstmal in ner einfachen Form läuft werde ich mir den Code ausdrucken und versuchen das zu verstehen, mir zu erarbeiten.
    Jetzt erstmal nur trockene fehlende Grundlagen lernen hilft mir nicht so richtig, das war schon bei VB der Fall.
    Da habe ich es auch vorgezogen mit dem learning by doing.

    Ich brauche manchmal auch einfach nur ein Stichwort, was mich auf die richtige Lösung bringt.
    So wie der Satz von dir, dass ich eine Instanz einer Klasse verwenden muss.
    Das ist sowas was ich alleine nicht rausbekomme, mit dem Hinweis aber weiter komme.
    War da ja auch der Fall.

    Deshalb hoffe ich ihr seht es einem newbie nach, wenn eine dumme Frage nach der anderen kommt... 🙄



  • Jetzt erstmal nur trockene fehlende Grundlagen lernen hilft mir nicht so richtig, das war schon bei VB der Fall.
    Da habe ich es auch vorgezogen mit dem learning by doing.

    Da is C++ aber die falsche Sprache! Da fängt man leider mit trockenen Grundlagen an. C++/CLI setzt noch einen drauf und die Krönung ist das dann mit Winforms zu vermischen. Eventuell wäre C# die bessere Wahl. Hier kommst Du zwar auch nicht um die Theorie, umgehst aber viele Probleme mit den Forms.



  • Knuddlbaer schrieb:

    Eventuell wäre C# die bessere Wahl. Hier kommst Du zwar auch nicht um die Theorie, umgehst aber viele Probleme mit den Forms.

    Warum umgehe ich da viele Probleme?
    Ich muss eine DLL schreiben, ist da nicht C# etwas fehl am Platze für?



  • Du solltest erst mal die Grundlagen lernen , dann kannst Du Entscheiden in welcher Sprache Du die DLL implementierst.



  • @knuddelbär

    hast recht meine instanz anzulegen war aus den gedächniss raus, im moment schreibe ich ausschließlich hardwarenahes C ohne OS und ich verdränge schnell wie die syntax einer sprache ist wenn ich sie nicht benutze 🙂 das hilft ungemein wenn es darum geht ständig in einer anderen sprache zu schreiben 🙂

    @nibbler
    ein hinweis noch, eine DLL mit .net erzeugt ist nicht gleich einer dll in reinen C++.

    zu den FTDI-Chips gibt es auch Open Source Treiber, vieleicht passen die besser.


Anmelden zum Antworten