2015-04-14 6 views
2

У меня есть класс C++ с его заголовком CFileMapping.cpp и CFileMapping.h Я хочу вызвать функцию C++ CFileMapping::getInstance().writeMemory() в моем C-коде.Как вызвать функцию C++ из кода C

Даже когда я обмотал C++ код и добавил

#ifdef __cplusplus 
extern "C" 

в заголовочном файле, чтобы иметь дело с кодом C++ и добавил
Экстерн «C» в файле CPP, я до сих пор не могу назвать моя функция как это

CFileMapping::getInstance().writeMemory(). 

Может ли кто-нибудь мне помочь? Я хочу сохранить свой код на C++ и иметь возможность называть его, когда захочу.

ответ

4

Вы должны создать C оболочку для вызова C++:

extern "C" 
{ 
    void WriteMemFile() 
    { 
    CFileMapping::getInstance().writeMemory(); 
    } 
} 

// The C interface 
void WriteMemFile(); 

ВАЖНО:extern "C" указывает, что функция использует соглашения C именовании.

+0

Спасибо за ваш ответ. У меня возникла ошибка в файле .cpp 'FileMapping.cpp :(. Text + 0x1014): неопределенная ссылка на std :: cout' . Даже если я добавил использование пространства имен std; после extern «C» –

+0

вам нужно скомпилировать его с помощью компилятора C++, а не C-компилятора, и тогда вы сможете вызвать эту библиотечную функцию из кода C –

+0

@ Emb_user Внимательно прочитайте сообщение http://stackoverflow.com/questions/ 1041866/in-c-source-what-the-the-effect-of-extern-c – VolAnd

Смежные вопросы