Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ Быстрота работы https://www.cyberforum.ru/ cpp-beginners/ thread924518.html
Скажите, какой алгоритм на языке C++ будет выполняться быстрее, если мы не знаем величину массива: в котором я создам сразу большой массив, а буду использовать только часть. Или быстрее будет...
Как записывать в массив с 2 переменными текст C++
Как записывать в массив с 2 переменными,текст,тоесть есть массив mas, в а="привет", в b="пока";
C++ stack around the variable was corrupted масив через указатель
Такая проблема - создаю масив целых чисел через функцию с использованием указателей - выскакивает данная ошибка, хотя код работает верно, почитал - что где-то идет переполнение, но как избавиться ума...
C++ Начало пути прогера Здравствуйте. Мне 19, перешел на 3 курс по специальности "Компьютерная безопасность". Уже 2 года периодически интересуюсь программированием, почитал некоторые книжки, попробовал написать код и каждый... https://www.cyberforum.ru/ cpp-beginners/ thread924471.html
C++ Составить блок-схему https://www.cyberforum.ru/ cpp-beginners/ thread924447.html
#include <iostream> #include <string> #include <iomanip> using namespace std; struct PRICE{ string tovar; string shop; int price; }; int main()
Число int в десятичной преобразовать в char - двоичной C++
Помогите пожалуйста. Ситуация похожа, код прилагается - нужно число int в десятичной преобразовать в char - двоичной, совсем запутался в указателях. В итоге в _result выводится абракадабра, пробовал...
C++ Что посоветуете написать?
Заканчиваю читать книгу о C++, после неё начну изучать алгоритмы. Чтобы закрепить мои скромные умения и получить опыт, какой проект нужно начать мне как новичку? Может, написать что-то под андроид?...
C++ Ошибка LNK2019 Создается библиотека D:\EWIL\EWIL(Old)\EWIL\scr\map editor\Debug\Map Editor.lib и объект D:\EWIL\EWIL(Old)\EWIL\scr\map editor\Debug\Map Editor.exp 4>EditorApp.obj : error LNK2019: ссылка на... https://www.cyberforum.ru/ cpp-beginners/ thread924399.html
C++ Как определить, нажата ли клавиша Enter https://www.cyberforum.ru/ cpp-beginners/ thread924371.html
В общем, хочу сделать чат на WinSock. Как только дошел до отправки/приема сообщений - сразу появилась проблема - как сделать так, чтобы срабатывало условие, если нажата клавиша, но при этом не...
C++ считывание с консоли ( не с клавы, а именно с консоли) нужно написать функцию которая возвращает string в котором написано 500 символов которые были выведены в консоли от начала. среда : VS2010 я так понимаю что нужно как-то использовать поток... https://www.cyberforum.ru/ cpp-beginners/ thread924356.html
4 / 4 / 1
Регистрация: 20.04.2011
Сообщений: 141
0

Использование функции cpp в проекте c

17.07.2013, 13:18. Просмотров 803. Ответов 5
Метки (Все метки)

Есть сишный проект, понадобилось прикрепить к нему один готовый плюсовый модуль.

Схематичный вид этого модуля:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
//module.cpp
namespace module_namespace
{
  struct params
  {
    inline params() : field1(val1), field2(val2), field3(val3), field4(val4) { }
 
    inline type foo() const
    {
    ...
    }
 
    type1 field1;
    type2 field2;
    type3 field3;
    type4 field4;
  };
 
...
 
bool abc(const params &comp_params = params());
 
}
Мне нужно: воспользоваться функцией abc из сишного main.
Но параметр функции - плюсовая структура с конструктором, из си никак не вызывается напрямую.

1. Создал отдельный header (extern_api.h), подключил его и к модулю и к main.
2. Описал в extern_api.h новую структуру params_c, которая содержит только поля, но не содержит конструкторов (чтобы было как си без плюсовых наворотов).
3. Сделал в модуле функцию-прокси abc_c, которая вызывается из си и из себя вызывает abc. Вместо params имеет параметр params_c, так что теперь ее можно вызывать из си.

C++
1
2
3
4
5
//add to module.cpp
 bool abc_c(const params &comp_params = params())
    {
        return abc(comp_params);
    }
4. Добавил в структуру params еще один конструктор, который будет инициализироваться от типа params_c.
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
//updated module.cpp
  struct params
  {
    inline params() : field1(val1), field2(val2), field3(val3), field4(val4) { }
    inline params(params_c* p): field1(p->field1), field2(p->field2), field3(p->field3), field4(p->field4) { }
 
    inline type foo() const
    {
    ...
    }
 
    type1 field1;
    type2 field2;
    type3 field3;
    type4 field4;
  };
5. Вытащил в exterm_api.h объявление abc_c.

C++
1
2
3
4
5
6
7
8
9
10
//extern_api.h
    typedef struct
    {
       type1 field1;
       type2 field2;
       type3 field3;
       type4 field4;
    } params_c;
 
extern  bool abc_c(const params_c *comp_params);
6. Встроил в систему makefile'ов этот модуль, скомпилировал как библиотеку .a, прикрепил либу к main. То есть main теперь видит либу .a, где определена abc_c и видит extern_api.h, где она объявлена.

Получаю undefined reference к abc_c.

Либа нормальная, компилится без ошибок, формат читаемый, имя функции фигурирует.

Пробовал различные комбинации с
C++
1
2
3
    #ifdef __cplusplus
    extern "C" {
    #endif
- не помогло. Куда это правильно поставить?

Еще есть ошибки с передачей параметра в abc, т.к. в объявлении и определении abc_c стоят параметры разных типов.

Как правильно настроить такую систему? Подскажите, пожалуйста, может я какую-нибудь ошибку не заметил..

Вернуться к обсуждению:
Использование функции cpp в проекте c
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
17.07.2013, 13:18
Готовые ответы и решения:

в проекте - надо в проекте win32api вынести все в другой *cpp* а не получаеться
определил функцию в другом спп и в основном ругается компилятор

Несколько cpp файлов в проекте
Доброго времени суток ! Есть проект и в нем 2 cpp файла: Main.cpp и BinaryNumber.cpp В...

Несколько *.cpp в одном проекте
Добрый день! В приложении требуется несколько *.cpp как выполнить код каждой *.cpp ?

Два файла .cpp в проекте
Файлы DayOfWeek и main(откуда вызываются методы из DayOfWeek). Пишет ошибку на скрине,что не так?...

5
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2020, vBulletin Solutions, Inc.