Lyrik -Спасибо, проверил. Поставил "С" в об'явление функции в файле с WinMain(..):
и получил другую ошибку, и как я понял, на "С":
error C2059: syntax error : 'string'
Из
поиска пришел к выводу, что проблемма была в том, что библиотека компилировалась из фаила '*.cpp'(созданного по-умолчанию), а существующий проект из файлов '*.с'
(В моем проверочном проэкте тоже создался файл 'cpp', потому и небыло проблем с external об'явлением.)
Когда я поменял расширения на *.с библиотека принята существующим проектом без проблем.
Т.е. с этим разобрался. Спасибо
Lyrik за пинок в правильном направлении
Теперь другая проблема: А можно ли С++ (не только С) код использовать из библиотеки?
Т.е. писать на С++, компилировать в new_code.lib, и подключать к существующему тем же образом, через extern?
Или каким другим образом?
Я попробовал использовать cout << (конечно с #include <iostream> using namespace std;) но получил ошибку:
fatal error C1189: #error : "eh.h is only for C++!"
Как такое сделать?
- ПОЛУЧИЛОСЬ!! Т.е сделал функцию на С++, в файле *.срр , откомпелировал в библиотеку (т.е в MS VS-6 это Win32 Static Library project), и использовал эту функцию из С проэкта.
А для этого понадобилось 2 вещи:
1. 'extern "C" ' перед имплементацией библиотечной функции:
extern "C" void displ(char* stn) { .... code ... )
2. точное совпадание типа компиляции, что подключает соответствующие библиотеки. Иначе конфликты.
в MSVS-v.6 это в project/setting: C/C++: code generation category; Use-run time library:
Ну а после этого - как обычно: подключил *.lib к существующему (добавил файл к проэкту) и об'явил екстернал библиотечную функцию. Все - можно пользовать.
Конечно, исключительно С++ (overloading, template, virtual funcs, что там еще...) использовать если и можно изловчится, но будет геморойно. Ну а так - нечто.