Есть у меня некая .lib' а (без .h), написанаая на gcc в MinGW
я хочу в студии вызвать из нее функцию
для чего пишу #pragma comment(lib, "ffmpeg.lib")
описываю функцию:
int Test();
и вызываю ее в коде
но студия на это говорит "identifier not found, even with argument-dependent lookup"
Здравствуйте, _hunter, Вы писали:
_>но студия на это говорит "identifier not found, even with argument-dependent lookup"
Значит, в том месте, где ты эту функцию используешь, её объявление (написанное тобой int Test(); ) недоступно. Может быть, ты поместил её в namespace? Может быть, забыл #include твой .h-файл с объявлением? Вариантов море.
До линковки дело ещё не дошло, поэтому #pragma comment(lib,...) роли не играет.
Здравствуйте, Кодт, Вы писали:
К>До линковки дело ещё не дошло, поэтому #pragma comment(lib,...) роли не играет.
перенес описание к функции:
int Test();
BOOL CClientApp::InitInstance()
{
CWinApp::InitInstance();
int result = Test();
получаю "unresolved external symbol "int __cdecl Test(void)" (?Test@@YAHXZ) referenced in function "public: virtual int __thiscall CClientApp::InitInstance(void)" (?InitInstance@CClientApp@@UAEHXZ)
"
Здравствуйте, _hunter, Вы писали:
_>Здравствуйте, Кодт, Вы писали:
К>>До линковки дело ещё не дошло, поэтому #pragma comment(lib,...) роли не играет. _>перенес описание к функции:
_>
_>int Test();
_>BOOL CClientApp::InitInstance()
_>{
_> CWinApp::InitInstance();
_> int result = Test();
_>
_>получаю "unresolved external symbol "int __cdecl Test(void)" (?Test@@YAHXZ) referenced in function "public: virtual int __thiscall CClientApp::InitInstance(void)" (?InitInstance@CClientApp@@UAEHXZ) _>"
externint Test();
BOOL CClientApp::InitInstance()
{
CWinApp::InitInstance();
int result = Test();
Проблема в том, что в библиотеке, скорее всего, недекорированное имя — в стиле голого Си. А компилятор С++ делает линкеру заявку на декорированные ( Test@BLABLABLA ), если ему специально не намекнуть.
Здравствуйте, _hunter, Вы писали:
К>>Осталось взять документацию по библиотеке... _>она мной скомпилена gcc в MinGW (это ffmpeg)
1) Странно: если у тебя есть исходники, зачем пришлось вручную декларировать функцию.
2) Скомпилировать её с помощью VC нельзя? Или портировать слишком кроваво?
Здравствуйте, Кодт, Вы писали:
К>1) Странно: если у тебя есть исходники, зачем пришлось вручную декларировать функцию.
потому как .h файл ffmpeg' а отсутствует... К>2) Скомпилировать её с помощью VC нельзя? Или портировать слишком кроваво?
на студии оно не компилится принципиально -- куча лдинуксовых инклюдов. портировать -- сложно по тем же причинам...
Здравствуйте, perf13, Вы писали:
>>>собралось, но при вызове Test() ловлю Unhandled Exception... P>может calling conventions разные?
Так вроде ж функция без параметров и возвращает int. Тут как ни крути, всё одинаково.
Где-то в другом месте ерунда творится: например, забыл инициализировать библиотеку (вызвать что-нибудь типа FFMpegInit() )
Здравствуйте, _hunter, Вы писали:
_>Здравствуйте, Кодт, Вы писали:
К>>1) Странно: если у тебя есть исходники, зачем пришлось вручную декларировать функцию. _>потому как .h файл ffmpeg' а отсутствует... К>>2) Скомпилировать её с помощью VC нельзя? Или портировать слишком кроваво? _>на студии оно не компилится принципиально -- куча лдинуксовых инклюдов. портировать -- сложно по тем же причинам...