funktion einbinden
-
Hi,
ich habe ein Programm das in c geschrieben ist, nun hab ich weiteres programm das ich mit visualstudio 2005 in c++ geschrieben habe, beides Konsoleanwendung.Nun würde ich gern in meinem C-Projekt die Fumktion benutzen, aber es klappt nicht. Ich bin wie folgt vorgegangen.
simpack_wrapper_master.c
#include "ipc_common_extern.h"
#include <stdio.h>
#include <string.h>
#include "windows.h"extern void getFDMU_id(char *fdmu_id);
int main(int argc, char **argv)
{
char fdmu_id[MAX_PATH];
getFDMU_id(fdmu_id);
}#include <iostream>
#include <fstream>
#include <string>
#include <windows.h>
using namespace std;getFDMU_id.cpp
void getFDMU_id(char *fdmu_id)
{
int a;
char *fdmu_;
const char *p;
char *inputFilePath;
inputFilePath = getenv("WINDOW_REGULATOR");
strcat(inputFilePath,"\\CarDoor.ifx");
ifstream inputFileStream(inputFilePath);
if (!inputFileStream){
cerr << "Could not open " << inputFilePath << " for reading " << endl;
}string line,cutline;
while (getline(inputFileStream, line))
{
if (line.find("FDMU-") != string::npos )
{
a=line.find("FDMU-");
cutline=&line[a];}
}
p=cutline.c_str();
strcpy(fdmu_id,p);
}die Fehlermeldung die ich erhalte beim kompilieren ist die folgende:
2>simpack_wrapper_master1.obj : error LNK2019: Verweis auf nicht aufgelöstes externes Symbol "_getFDMU_id" in Funktion "_main".
2>..\output_debug\SimpackWrapperMaster.exe : fatal error LNK1120: 1 nicht aufgelöste externe Verweise.bin dankbar für jede idee.
-
Sieht so aus, als ob die C/CPP Datei nicht in das Projekt eingefügt wurde.
-
Und wenn es das nicht ist, dann bist Du ggfs. Opfer des C++ Name Mangling geworden. Das behebst Du mit:
extern "C" void getFDMU_id(char *fdmu_id);
Das dürfte aber eigentlich (ohne Rumspielerei an den Compiler-Optionen) nur dann passieren, wenn Du Deine Funktion in einem .c File hast.
-
erstmal danke für eure antworten, wenn ich
extern "C" void getFDMU_id(char *fdmu_id);
hinzufüge erhalte ich folgenden Fehler
3>c:\test\msmodule_simpack-0.5\simpackwrappermaster\src\simpack_wrapper_master.c(6) : error C2059: Syntaxfehler: 'Zeichenfolge'
#include "ipc_common_extern.h"
#include <stdio.h>
#include <string.h>
#include "windows.h"extern "C" void getFDMU_id(char *fdmu_id);
int main(int argc, char **argv){....}
-
Das extern "C" ist dazu da, um das C++-Namemangling zu deaktivieren, also musst Du es auch im C++-File angeben. Der C-Compiler kann damit nichts anfangen.
-
Schreib mal:
getFDMU_id.cpp
extern "C" void getFDMU_id(char *fdmu_id) { int a; char *fdmu_; .... }
und lass das .c File so wie es war.
-
entschuldige ich bin nicht der superprogrammierer, ich hab das in der cpp nun so dann auch angegeben aber bekomme die gleiche fehlermeldung.
3>c:\test\msmodule_simpack-0.5\simpackwrappermaster\src\simpack_wrapper_master.c(6) : error C2059: Syntaxfehler: 'Zeichenfolge'
#include <iostream>
#include <fstream>
#include <string>
#include <windows.h>using namespace std;
extern "C" void getFDMU_id(char *fdmu_id)
{ ...}zu der Projektmappe gehört eine header in der extern c schonmal angegeben ist, kann das zu einem konflikt führen?
#pragma once#ifdef __cplusplus
extern "C"
{
#endif /* ifdef __cplusplus */#ifdef TEST_EXPORTS
#define TEST __declspec(dllexport)
#else
#define TEST __declspec(dllimport)
#endifTEST bool connect();
TEST bool disconnect();TEST bool put();
TEST bool take();#ifdef __cplusplus
}
#endif /* ifdef __cplusplus */
-
Es hat jetzt geklappt hatte vor der main auch noch das "C" drinne, nach dem ich es raus gemacht hab liefs.
super ich danke euch
#include <iostream>
#include <fstream>
#include <string>
#include <windows.h>using namespace std;
extern "C" void getFDMU_id(char *fdmu_id)
{ ...}.
.
.#include "ipc_common_extern.h"
#include <stdio.h>
#include <string.h>
#include "windows.h"
extern void getFDMU_id(char *fdmu_id);int main(int argc, char **argv)
{
char fdmu_id[MAX_PATH];
getFDMU_id(fdmu_id);
}