Хочу загрузить функцию из DLL.
Описал указатель на на нее.
int (*fptr)();
....
fptr = (int (*)())*dllqueryfn(dllHandle,"GetValue");
Компилятор говорит:
Error: "int(*)()" cannot be converted to "extern "C" int(*)()".
Кто знает почему?
Еще кто знает, если подгружаемая функция
char *GetValue()
, указатель на нее д.б.
char (*fptr)();
?
Здравствуйте, pravsha, Вы писали:
P>fptr = (int (*)())*dllqueryfn(dllHandle,"GetValue");
dllqueryfn — что бы это было такое, к чему бы перед этим символом стояла звезда и как он описан ранее?
P>char *GetValue() P>, указатель на нее д.б. P>char (*fptr)();
Здравствуйте, Eugene_B, Вы писали:
EB>Здравствуйте, pravsha, Вы писали:
EB>Опиши функцию как EB>extern 'C' int (*fptr)();
EB>Начколько я понимаю, при експорте функций из DLL применяется С-е соглашение о вызовах.
Нет. Экспортировать можно функции с любым соглашением. extern "C" влияет только на экспортируемое имя функции, т.е. с extern "C" оно просто не будет искажаться.
Прошу прощения — я малость ошибся...
fptr = (int (*)())dllqueryfn(dllHandle,"GetValue");
Может поможет — пишу на С под IBM OS/390.
ИВ>Здравствуйте, pravsha, Вы писали:
P>>fptr = (int (*)())*dllqueryfn(dllHandle,"GetValue");
ИВ>dllqueryfn — что бы это было такое, к чему бы перед этим символом стояла звезда и как он описан ранее?
P>>char *GetValue() P>>, указатель на нее д.б. P>>char (*fptr)();
ИВ>
Здравствуйте, pravsha, Вы писали:
P>Прошу прощения — я малость ошибся... P>fptr = (int (*)())dllqueryfn(dllHandle,"GetValue"); P>Может поможет — пишу на С под IBM OS/390.
Никогда не писал под os/390. Какой стандарт поддерживает C-компилятор? Имхо до C99 можно было указателям присваивать любые указатели без приведения типа. Хотя могу и ошибаться.
Упоминание extern "C" вызывает сомнения в сишности кода. Может все же C++? Попробуй typedef, как и советовали.