Я получаю ошибки связывания
ошибка LNK2028: неразрешенный токен (0A000018) "extern" C "void __clrcall MyCFunction (struct ud *)" (? MyCFunction @@ $$ J0YMXPAUud @@@ Z), на который ссылается функция "public: __clrcall MyCPPProj :: MyClass: : MyClass
ошибка LNK2019: неразрешенный внешний символ "extern" C "void __clrcall MyCFunction (struct ud *)" (? MyCFunction @@ $$ J0YMXPAUud @@@ Z), на который имеется ссылка в функции "public: __clrcall MyCPPProj :: MyClass :: MyClass
Когда я пытаюсь вызывать функции в моей статической библиотеке C из класса C ++.
Вот как начинается заголовок моей библиотеки:
#ifdef __cplusplus
extern "C" {
#endif
#include <stdio.h>
#include "types.h"
extern void MyCFunction(struct myCStruct*);
Вот фрагмент из реализации заголовка:
extern void
MyCFunction(struct myCStruct* cStrInst)
{
//Do stuff
}
и вот как я это называю:
#include "MyCLib.h"
MyClass::MyClass() {
myCStruct myCObj;
MyCFunction(&myCObj);
//More to follow...
}
Кто-нибудь знает, где я иду не так? Весь совет, который я могу найти, кажется, уже реализован, то есть объявление всего заголовка с помощью extern "C" {
wrapper (http://www.parashift.com/c++-faq-lite/mixing-c-and-cpp.html).
EDIT
Я попытался сделать библиотеку C более совместимой с C ++ и включил ее как C ++ и C с тем же результатом: ошибки компоновщика LNK2028 и LNK2019. Я сделал это статической библиотекой, потому что проекты должны иметь тип, и мне нужно было увидеть, как он компилируется отдельно перед добавлением его в мое решение.