Я пытаюсь включить код C, который я нашел в нашем проекте на C++. Функция определяется как это в файле C.Ошибка компоновщика при вызове функции C из кода C++ в другом проекте VS2010
#ifdef __cplusplus
extern "C" {
#endif
extern char *dtoa(double, int, int, int *, int *, char **);
extern char *g_fmt(char *, double);
extern void freedtoa(char*);
#ifdef __cplusplus
}
#endif
char *
g_fmt(register char *b, double x)
{
Проект VS, в который я включаю это, создает dll. Файл компилируется как C, другие файлы в проекте компилируются как C++.
я добавил заголовок включить в моей C++ файлы
#ifndef G_FMT_H
#define G_FMT_H
#ifdef __cplusplus
extern "C" {
#endif
extern char *dtoa(double, int, int, int *, int *, char **);
extern char *g_fmt(char *, double);
extern void freedtoa(char*);
#ifdef __cplusplus
}
#endif
#endif //G_FMT_H
В другом проекте в решении я включаю мой заголовок и попытаться вызвать функцию g_fmt.
#include "header.h"
...
g_fmt(my_array, 2.0);
Этот проект связан с другим, я могу вызвать функции C++ в первой библиотеке без каких-либо проблем. Однако добавление вышеприведенной строки дает мне ошибку lnk2001.
error LNK2001: unresolved external symbol g_fmt
Я нашел ряд других вопросов о смешивании C и C++, и я, кажется, сделали все необходимое с Экстерн ключевые слова в нужных местах, но я до сих пор не в состоянии связать. Есть ли что-то конкретное, что мне нужно делать в VS2010?
, поэтому вы можете использовать dtoa, но не g_fmt? – marom
нет, я имею в виду, что я могу использовать функции C++, объявленные в другом месте в той же библиотеке. Я читал в других сообщениях, которые вы можете смешивать C и C++ в одном проекте, может быть, это не совсем так? – Boumbles
Это правда, дело в том, как вы экспортируете функции? Обычно вам нужен __declspec (dllexport) или файл def. Какой метод вы используете здесь? – marom