Erweiterung von C++/CLI-Projekt durch alten C-Code



  • Hey, ich hab folgendes Problem und hoffe, dass mir vielleicht einer von euch helfen kann.

    Ich habe vor einiger Zeit ein Windows Forms mit Hilfe eines C++/CLI-Projekts erstellt. (Ich weiß - heute würd ich´s nicht mehr so machen.)

    Um einen Sensor auswerten zu können muss ich dieses Projekt jetzt um C-Code erweitern. Der Hersteller des Sensors stellt mir zwei DLLs zur Verfügung. Der C-Code mit den DLL´s als eigene C-Konsolenanwendung funktioniert.
    Keine Fehlermeldungen, keine Probleme.
    Dieses C-Programm habe ich jetzt in mein bestehendes C++/CLI-Projekt eingefügt. Die Headerfiles für die DLLs ebenso und habe alles erfolgreich eingebunden.

    Name des C-Programms ist "apitest.c"
    Name der beiden Headerfiles: "Can_def.h" und "CANL2.H"

    Da ich mit vorkompilierten Headern arbeite, habe ich dort folgendes eingebunden:

    #include <windows.h>
    #include "FileManager.h"
    #include "ProcessHandler.h"
    #include "OperatingHandler.h"
    
    #include <conio.h>
    #include <stdio.h>
    #include <windows.h>
    #include <process.h>
    
    extern "C"
    {
    #include "can_def.h"  // dll import and export definitions
    #include "canL2.h"   // definition of the API functions an the structures
    #include "apitest.c"   
    }
    

    Wenn ich das Projekt nun kompiliere, erhalte ich 7 Fehler, die ich weder zuordnen kann noch mit meinem doch eher bescheidenen Wissen beheben kann. Zwei Beispiele dazu:

    Fehler 17 error C2440: '=': 'void *' kann nicht in 'PCHDSNAPSHOT' konvertiert werden

    Fehler 16 error C2664: 'uintptr_t _beginthreadex(void *,unsigned int,unsigned int (__stdcall *)(void *),void *,unsigned int,unsigned int *)' : Konvertierung von Argument 3 von 'DWORD (__stdcall *)(LPVOID)' in 'unsigned int (__stdcall *)(void *)' nicht möglich

    Unter Projekt - Einstellungen - Allgemein habe ich bereits "Common Language Runtime Unterstützung" ausgewählt. Dadurch werden zwei weitere Fehler unterdrückt.

    Was außerdem auffällt:
    Fehler 17 (beschreibung siehe oben) verweist auf folgende Code-Zeile:

    pBuffer = malloc(u32NeededBufferSize);
    

    Wenn ich in der C-Konsolenanwendung einen Rechtsklick auf pBuffer mache und auf "gehe zur Definition" klicke, dann werde ich korrekterweise auf Code, weiter oben in apitest.c verwiesen.
    Wenn ich das gleiche im C++/CLI-Projekt mache, dann werde ich auf eine Variable pBuffer in "wtypes.h" verwiesen. Scheinbar gibt es da eine Variable mit gleichem Namen.

    Außerdem fällt auf, dass diese farbige Code-Markierungen in apitest.c fehlen. Also z.B. für

    #define OUTPUT_BUFFER_LEN 25
    

    OUTPUT_BUFFER_LEN wird doch normalerweise lila markiert. Im C++/CLI Projekt ist das nicht so. Aber nur in Apitest.c

    Sorry für meine amateurhafte Beschreibung. Vielleich hat hier ja jemand ne Idee. Ich komme seit Tagen nicht weiter und bin für jede Anregung dankbar.



  • Du solltest auf keinen Fall die "apitest.c" per "#include" einbinden (da hier ja sonst der C++/CLI-Compiler dafür aufgerufen wird), sondern als eigenständige Datei zu deinem Projekt hinzufügen (oder sogar ein eigenes Lib-Projekt davon erzeugen)!



  • Wobei das doch hier erklärt ist, oder verstehe ich was falsch?
    Ich dachte, das ist die einfachste Variante.

    https://isocpp.org/wiki/faq/mixing-c-and-cpp#overview-mixing-langs



  • nullie schrieb:

    Wobei das doch hier erklärt ist, oder verstehe ich was falsch?

    Dort wird auf C++, nicht auf C++/CLI eingegangen.


Anmelden zum Antworten