Указатель на функцию
От: Carc Россия https://vk.com/gosha_mazov
Дата: 27.09.04 19:50
Оценка:
У меня есть функция, вернее ее обьявление реализовать ее должна некая внешняя длл, как мне написать указатель на нее?
т.е. написано

BOOL MyPluginAPIOooopsFunc(LPCTSTR lpsz);

и чтобы получать на нее указатель из длл мне приходиться писать

typedef BOOL (*MYPLUGINAPIOOOOPSFUNC)(LPCTSTR );

т.е. по сути давать второе определение.... Как бы мне избежать двойного определения, т.е. как мне зная на самом деле сигнатуру функии (обьява то у меня есть) привести ее к нужному указателю при GetProcAddress?
Aml Pages Home
Re: Указатель на функцию
От: Николай Gorlum  
Дата: 27.09.04 20:09
Оценка:
Здравствуйте, Carc, Вы писали:

C>У меня есть функция, вернее ее обьявление реализовать ее должна некая внешняя длл, как мне написать указатель на нее?

C> т.е. написано

C>BOOL MyPluginAPIOooopsFunc(LPCTSTR lpsz);


C>и чтобы получать на нее указатель из длл мне приходиться писать


C>typedef BOOL (*MYPLUGINAPIOOOOPSFUNC)(LPCTSTR );


C> т.е. по сути давать второе определение.... Как бы мне избежать двойного определения, т.е. как мне зная на самом деле сигнатуру функии (обьява то у меня есть) привести ее к нужному указателю при GetProcAddress?


имхо, необходимо все таки писать дополнительное определение... жалко, конечно, что нету оператора typeof

может сделать что-нибудь вроде:

template<class T>
T* TGetProcAddress(T, HMODULE a, LPCTSTR b) {
return (T*)GetProcAddress(a,b);
}

запуск функции выглядит примерно так:
TGetProcAddress(имя ранее опредленной функции, хэндл модуля, "имя функции")(параметры функции);
можно добавить какой-нибудь макрос, если имя функции и строка одинаковые...

тут минус — каждый раз функция будет искаться...
Re: Указатель на функцию
От: Андрей Тарасевич Беларусь  
Дата: 27.09.04 22:40
Оценка:
Здравствуйте, Carc, Вы писали:

C>У меня есть функция, вернее ее обьявление реализовать ее должна некая внешняя длл, как мне написать указатель на нее?

C> т.е. написано

C>BOOL MyPluginAPIOooopsFunc(LPCTSTR lpsz);


C>и чтобы получать на нее указатель из длл мне приходиться писать


C>typedef BOOL (*MYPLUGINAPIOOOOPSFUNC)(LPCTSTR );


C> т.е. по сути давать второе определение.... Как бы мне избежать двойного определения, т.е. как мне зная на самом деле сигнатуру функии (обьява то у меня есть) привести ее к нужному указателю при GetProcAddress?


Если речь идет об избежании дупликации между именно объявлением (не определением) функции и типа указателя, то можно сделать так

В заголовочном файле библиотеки

typedef BOOL MYPLUGINAPIOOOOPSFUNC(LPCTSTR);

MYPLUGINAPIOOOOPSFUNC MyPluginAPIOooopsFunc;


В месте определения типа указателя

typedef PTR_MYPLUGINAPIOOOOPSFUNC* MYPLUGINAPIOOOOPSFUNC;


Но для этого придетя модифицировать заголовочный файл библиотеки. Не знаю, есть ли у тебя такая возможность.
Best regards,
Андрей Тарасевич
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.