Импорт функций из DLL
От: pravsha Россия  
Дата: 28.03.03 14:18
Оценка:
Хочу загрузить функцию из DLL.
Описал указатель на на нее.
int (*fptr)();
....
fptr = (int (*)())*dllqueryfn(dllHandle,"GetValue");
Компилятор говорит:
Error: "int(*)()" cannot be converted to "extern "C" int(*)()".
Кто знает почему?
Еще кто знает, если подгружаемая функция
char *GetValue()
, указатель на нее д.б.
char (*fptr)();
?
Re: Импорт функций из DLL
От: Игорь Вартанов Ниоткуда  
Дата: 28.03.03 14:41
Оценка:
Здравствуйте, pravsha, Вы писали:

P>fptr = (int (*)())*dllqueryfn(dllHandle,"GetValue");


dllqueryfn — что бы это было такое, к чему бы перед этим символом стояла звезда и как он описан ранее?

P>char *GetValue()

P>, указатель на нее д.б.
P>char (*fptr)();

char* (*fptr)();
---
С уважением,
Игорь
Re: Импорт функций из DLL
От: WolfHound  
Дата: 28.03.03 17:10
Оценка:
Здравствуйте, pravsha, Вы писали:
Прекрасно работающий код
    typedef T_RefStrong<I_FactorysContainer>(CALLBACK* D_GetFactorysContainer)(I_Application*);

    D_GetFactorysContainer proc=(D_GetFactorysContainer)GetProcAddress(lib, ?GetFactorysContainer@@YG?AV?$T_RefStrong@VI_FactorysContainer@@@wlib@@PAVI_Application@@@Z");
... << RSDN@Home 1.0 beta 5 >>
Пусть это будет просто:
просто, как только можно,
но не проще.
(C) А. Эйнштейн
Re: Импорт функций из DLL
От: Eugene_B  
Дата: 28.03.03 18:03
Оценка:
Здравствуйте, pravsha, Вы писали:

Опиши функцию как
extern 'C' int (*fptr)();

Начколько я понимаю, при експорте функций из DLL применяется С-е соглашение о вызовах.
Re[2]: Импорт функций из DLL
От: Дмитро  
Дата: 29.03.03 00:46
Оценка:
Здравствуйте, Eugene_B, Вы писали:

EB>Здравствуйте, pravsha, Вы писали:


EB>Опиши функцию как

EB>extern 'C' int (*fptr)();

EB>Начколько я понимаю, при експорте функций из DLL применяется С-е соглашение о вызовах.


Нет. Экспортировать можно функции с любым соглашением. extern "C" влияет только на экспортируемое имя функции, т.е. с extern "C" оно просто не будет искажаться.

--
Дмитрий
--
Дмитрий
Re[2]: Импорт функций из DLL
От: pravsha Россия  
Дата: 31.03.03 07:49
Оценка:
Здравствуйте, Игорь Вартанов, Вы писали:

Прошу прощения — я малость ошибся...
fptr = (int (*)())dllqueryfn(dllHandle,"GetValue");
Может поможет — пишу на С под IBM OS/390.



ИВ>Здравствуйте, pravsha, Вы писали:


P>>fptr = (int (*)())*dllqueryfn(dllHandle,"GetValue");


ИВ>dllqueryfn — что бы это было такое, к чему бы перед этим символом стояла звезда и как он описан ранее?


P>>char *GetValue()

P>>, указатель на нее д.б.
P>>char (*fptr)();

ИВ>
char* (*fptr)();
Re[3]: Импорт функций из DLL
От: Игорь Вартанов Ниоткуда  
Дата: 01.04.03 07:30
Оценка:
Здравствуйте, pravsha, Вы писали:

P>Прошу прощения — я малость ошибся...

P>fptr = (int (*)())dllqueryfn(dllHandle,"GetValue");
P>Может поможет — пишу на С под IBM OS/390.

Никогда не писал под os/390. Какой стандарт поддерживает C-компилятор? Имхо до C99 можно было указателям присваивать любые указатели без приведения типа. Хотя могу и ошибаться.

Упоминание extern "C" вызывает сомнения в сишности кода. Может все же C++? Попробуй typedef, как и советовали.

И все же каков точный прототип dllqueryfn?
---
С уважением,
Игорь
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.