![]() |
|
Модераторы: Daevaorn |
![]()
|
|
| fear |
|
||||||||
![]() Бывалый ![]() Профиль Группа: Участник Сообщений: 171 Регистрация: 16.4.2006 Репутация: 1 Всего: 1 |
Как правильно реализовать вызов С-функции из С++ файла? В примере приведённом ниже, возникает ошибка LNK1120: 1 unresolved externals, как разрешить?
Это сообщение отредактировал(а) fear - 6.9.2007, 13:07 |
||||||||
|
|||||||||
| Sartorius |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1568 Регистрация: 18.7.2006 Где: Ivory tower Репутация: 8 Всего: 37 |
Что бы избежать декорирование имен используем extern "C" перед прототипом функции в C++ программе.
|
|||
|
||||
| Fazil6 |
|
|||
|
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1653 Регистрация: 3.5.2006 Где: Минск Репутация: 35 Всего: 60 |
файл реализации в проект включен?
|
|||
|
||||
| fear |
|
||||||||
![]() Бывалый ![]() Профиль Группа: Участник Сообщений: 171 Регистрация: 16.4.2006 Репутация: 1 Всего: 1 |
И получаем в 5й строке ф-ла hello.h
Добавлено через 27 секунд
да, включён |
||||||||
|
|||||||||
| Sartorius |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1568 Регистрация: 18.7.2006 Где: Ivory tower Репутация: 8 Всего: 37 |
И получаем в 5й строке ф-ла hello.h
error C2059: syntax error : 'string' Ошибка очевидно возникает при компиляции C-ного проекта. Либо делаешь отдельный H-ник для C++. либо поступаешь так :
|
|||
|
||||
| fear |
|
|||
![]() Бывалый ![]() Профиль Группа: Участник Сообщений: 171 Регистрация: 16.4.2006 Репутация: 1 Всего: 1 |
Спасибо за помощь, выглядеть решение должно так:
Это сообщение отредактировал(а) fear - 6.9.2007, 13:41 |
|||
|
||||
| akizelokro |
|
|||
![]() Крокодил ![]() ![]() Профиль Группа: Участник Сообщений: 761 Регистрация: 30.7.2007 Репутация: 1 Всего: 5 |
Подлинкуй hello.obj . И еще мне extern "C" не нравится в hello.h
Это сообщение отредактировал(а) akizelokro - 6.9.2007, 13:42 -------------------- a = a + b; b = a - b; a = a - b; |
|||
|
||||
| bsa |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 9185 Регистрация: 6.4.2006 Где: Москва, Россия Репутация: 63 Всего: 196 |
Посмотри стандартные заголовочные файлы, например stdio.h, которых входят в комплект стандартой библиотеки. Там увидишь именно такую конструкцию. |
|||
|
||||
| akizelokro |
|
|||
![]() Крокодил ![]() ![]() Профиль Группа: Участник Сообщений: 761 Регистрация: 30.7.2007 Репутация: 1 Всего: 5 |
Нужно проще. #include "hello.c" выбросить из main.cpp
вместо него вставить extern "C" int hello(); в самом "hello.h" убрать extern "C" и не надо городить огород из дефайнов -------------------- a = a + b; b = a - b; a = a - b; |
|||
|
||||
| bsa |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 9185 Регистрация: 6.4.2006 Где: Москва, Россия Репутация: 63 Всего: 196 |
akizelokro, что курил? Зачем придумывать какую-то фигню, когда есть стандартное решение?
|
|||
|
||||
| akizelokro |
|
|||
![]() Крокодил ![]() ![]() Профиль Группа: Участник Сообщений: 761 Регистрация: 30.7.2007 Репутация: 1 Всего: 5 |
А кой смысл тогда мотать в одном проекте вместе *.cpp и *.с? -------------------- a = a + b; b = a - b; a = a - b; |
|||
|
||||
| archimed7592 |
|
|||
![]() Архимед ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2531 Регистрация: 12.6.2004 Где: Moscow Репутация: 58 Всего: 93 |
Смысл бывает. Не надо ограничиваться исключительно своим опытом. Угу. Теперь сделай то же самое, скажем, для windows.h. Выброси его include и понавтыкай два десятка "ручных" объявлений. Самое интересное начнётся, когда ты так сделаешь для десятка другого модулей, и тут, как бы невзначай, заголовочный файл, который ты так опрометчиво выкинул, изменит сигнатуры ф-ции. -------------------- If you have an apple and I have an apple and we exchange apples then you and I will still each have one apple. But if you have an idea and I have an idea and we exchange these ideas, then each of us will have two ideas. © George Bernard Shaw |
|||
|
||||
| akizelokro |
|
|||
![]() Крокодил ![]() ![]() Профиль Группа: Участник Сообщений: 761 Регистрация: 30.7.2007 Репутация: 1 Всего: 5 |
Тут я не поспорю (редкий случай, отдохнуть чтоли надо? -------------------- a = a + b; b = a - b; a = a - b; |
|||
|
||||
| archimed7592 |
|
|||
![]() Архимед ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2531 Регистрация: 12.6.2004 Где: Moscow Репутация: 58 Всего: 93 |
Ну возьми нестандартную... Только чтобы там было(и исползовалось оттуда) более 20 ф-ций. Да пусть даже одна ф-ция. Сегодня одна, а завтра две. Ну ладно, добавишь где надо вторую. Потом третью. Потом понеслась. Не проще ли с самого начала делать по человечески? Это не преждевременная пессемизация - это здравый смысл © Sutter. -------------------- If you have an apple and I have an apple and we exchange apples then you and I will still each have one apple. But if you have an idea and I have an idea and we exchange these ideas, then each of us will have two ideas. © George Bernard Shaw |
|||
|
||||
![]()
|
| Правила форума "С++:Общие вопросы" | |
|
|
Добро пожаловать!
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | C/C++: Общие вопросы | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |