LINUX.ORG.RU

[gcc]указание стандарта вызова функций отличного от cdecl

 


0

0

Есть библиотека, функции которой используют стандарт вызова отличный от cdecl. Получение адресов на функции происходит посредством dlopen/dlsym.

void ( *lib_SomeFunc )( const int arg1, cont int arg2 );

void lib_Load(void)
{
  void* myLib = (void*)dlopen( 'libmy.so', 0x01 );

  lib_Init = (typeof(lib_SomeFunc))dlsym( myLib, 'lib_SomeFunc' );
}

В результате функция lib_Init вызывается как cdecl-объявленная, и соответственно аргументы передаются неправильно - справа на лево, а нужно «слева на право». Можно ли как-то объявить lib_Init и указать что-то отличное от cdecl?

★★★★

а ёпт...

s/lib_Init/lib_SomeFunc/

Andru ★★★★
() автор топика

Хм, как определить стандарт вызова нашел:

void ( __attribute__((__cdecl__)) *lib_SomeFunc )( const int arg1, cont int arg2 )

Но вот трабла с правилом "left-to-right" осталась, можно ли как-то
использовать стандарт вызова pascal? :)

Andru ★★★★
() автор топика
Ответ на: комментарий от Deleted

о, спасибо, сейчас поищем :)

Andru ★★★★
() автор топика
Ответ на: комментарий от Deleted

эх... нету ничего что надо :( Значит буду править саму библиотеку.

Andru ★★★★
() автор топика
Ответ на: комментарий от Andru

>> Но вот трабла с правилом "left-to-right" осталась, можно ли как-то использовать стандарт вызова pascal? :)

А разве pascal это не stdcall, который в win api используется? И может быть проще в объявлении функции аргументы местами поменять?

Deleted
()
Ответ на: комментарий от Deleted

>А разве pascal это не stdcall, который в win api используется?

это как раз-таки сишный порядок пар-ов в вызове.

>И может быть проще в объявлении функции аргументы местами поменять?

а это вообще бред :))))

Deleted
()
Ответ на: комментарий от Deleted

>> А разве pascal это не stdcall, который в win api используется?

вендовая версия gcc так и компилит(во всяком случаи DevCpp из под Wine).
В Linux используя __stdcall__ всеравно меняются местами аргументы.

>> И может быть проще в объявлении функции аргументы местами поменять?

Это будет изврат :)

Andru ★★★★
() автор топика
Ответ на: комментарий от frame

я тоже думал что сие выход, но есть функции с параметрами более 3...

Andru ★★★★
() автор топика
Ответ на: комментарий от Deleted

>> И может быть проще в объявлении функции аргументы местами поменять?

> а это вообще бред :))))

Это не бред, а гениальная идея. Но её действительно лучше не применять :)

const86 ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.