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@@AAM@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.