Linkerproblem: Einfügen von C-Dateien(Funktionen) in WindowsForms



  • Hallo zusammen,

    ich habe ein ziemlich nerviges Problem mit WindowsForms. Ich möchte zu einem bestehendem Beispiel das als Konsolenanwendungvorliegt eine Oberflächenbasierte Steuerung programmieren, also mit WindowsForms. Dieses Beispielanwendung liegt in C-Code vor und stellt mir meine ganzen benötigten Funktionen bereit.
    Ich habe bereits bei den c-Dateien die "Common Language Runtime" Unterstützuung ausgeschaltet um sie kompilieren zu können.
    Wenn ich in WindowsForms jetzt einen Funktionsaufruf meiner C-Dateien einfüge bekomme ich folgende Fehlermeldung beim linken.

    1>NFC.obj : error LNK2028: Nicht aufgelöstes Token (0A00002C) ""void __cdecl selbstfunktion(void)" (?selbstfunktion@@$$FYAXXZ)", auf das in Funktion ""public: __clrcall NFC::Form1::Form1(void)" (??0Form1@NFC@@$$FQAAM@XZ)" verwiesen wird. 1>NFC.obj : error LNK2019: Verweis auf nicht aufgelöstes externes Symbol ""void \_\_cdecl selbstfunktion(void)" (?selbstfunktion@@FYAXXZ)"inFunktion""public:__clrcallNFC::Form1::Form1(void)"(??0Form1@NFC@@FYAXXZ)" in Funktion ""public: \_\_clrcall NFC::Form1::Form1(void)" (??0Form1@NFC@@FQFQAAM@XZ)".

    Weiß jemand Rat beim Einfügen von C-Dateien in ein WindowsForms Projekt?

    Vielen Dank



  • Wo und wie hast Du denn diese "selbstfunktion" deklariert?

    Vermutlich musst Du sich noch als 'extern "C"' deklarieren...



  • Also die "Selbstfunktion" war nur ein Test von mir um den Fehler selber auch nachzubauen. Ich benutze eine ganze Library mit der ich NFC-Platinen ansteueren möchte.

    Dabei hab ich in meinem WindowsForms Projekt einen neuen Filter angelegt und dann darin diese vorhanden Struktur der Library eingefügt. Also .c und .h - Dateien in einem Ordner.
    In Form1.h hab ich natürlich die ganzen Header-Dateien includiert.
    Ich könnte zwar bei den ganzen C-Dateien über ->Eigenschaften->Erweitert->Als C-Code Compilieren einstellen, aber dann schauts ganz böse aus. Sie sollen also weiterhin als C-Code kompiliert werden.

    Anbei ein Auszug von einer Deklaration:

    static phcsBfl_Status_t phcsBflNfc_InitiatorWtxCb(phcsBflNfc_Initiator_t *initiator_object,
    uint8_t set,
    uint8_t wtxm,
    uint8_t fwi,
    void *p_user);

    Wenn ich in der Header Datei "extern C" davor schreibe bekomme ich die Fehlermeldung 'unbekannte Zeichenfolge'. Hab´s auch mit oder ohne {} versucht.



  • Ach ja, 'unbekannte Zeichenfolge' ist ja klar, da ich die Datei ja sowieso als C-Code Kompilieren hab lassen.

    Ich hab für alle C-Dateien die ich in das Projekt eingefügt habe folgende Einstellung gewählt: -> Eingenschaften->Erweitert->Als C-Code kompilieren

    Aber das kompilieren ist ja auch nicht mein Problem, sondern das linken.



  • Problem gelöst 😃 , hab folgenden Code in die Header eingefügt:

    #ifdef __cplusplus		
    extern "C"
    {
    #endif
    
    Funktion()
    
    #ifdef __cplusplus
    }
    #endif
    

    und dann natürlich bei allen zu den Header gehörigen C-Dateien natürlich default-mäßig auf "Als C-Code Kompilieren" gestellt.


Anmelden zum Antworten