Здравствуйте, Arier, Вы писали:
A>Нужно узнать число параметров у функции в dll, зная адрес данной функции и её имя.
В С++ рефлексии нет.
A>Ну или подскажите способ вызова функций по адресу и имени!Спасибо
int __stdcall the_foo(char, double, int) { ..... }
typedef void(*VoidFunc)(); // все функции можно привести к этому типу
VoidFunc vf = foo;
typedef int (__stdcall *FooType)(char,double,int);
FooType some_foo = (FooType)vf; // получили из обезличенного указателя - указатель нужного типа
int x = some_foo('a',1.23,45); // и вызвали
Конкретно что касается DLL под виндами,
HMODULE hLib = LoadLibrary("the.dll");
FooType some_foo = (FooType) GetProcAddress(hLib, "the_foo"); // если функция была экспортирована под этим именем
Ну и чтоб два раза не вставать, упомяну, что
— экспортные имена у функций из С++ных библиотек, как правило, декорированы (mangled, decorated) — содержат суффикс с информацией о типе, это нужно для перегрузки
— можно заставить компилятор экспортировать/импортировать недекорированные имена — они объявляются как extern "C"
— однако, для разных конвенций вызова такие имена будут остаточно декорированы в стиле Си или WinAPI — "_the_foo" (конвенция __cdecl) или "the_foo" (конвенция __stdcall)
— в .def-файле можно указать линкеру, как именно экспортировать функцию — вплоть до того, что её именем будет целое число
... << RSDN@Home 1.2.0 alpha rev. 655>>