У меня есть функция, вернее ее обьявление реализовать ее должна некая внешняя длл, как мне написать указатель на нее?
т.е. написано
BOOL MyPluginAPIOooopsFunc(LPCTSTR lpsz);
и чтобы получать на нее указатель из длл мне приходиться писать
typedef BOOL (*MYPLUGINAPIOOOOPSFUNC)(LPCTSTR );
т.е. по сути давать второе определение.... Как бы мне избежать двойного определения, т.е. как мне зная на самом деле сигнатуру функии (обьява то у меня есть) привести ее к нужному указателю при GetProcAddress?
Здравствуйте, 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(имя ранее опредленной функции, хэндл модуля, "имя функции")(параметры функции);
можно добавить какой-нибудь макрос, если имя функции и строка одинаковые...
тут минус — каждый раз функция будет искаться...
Здравствуйте, 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;
Но для этого придетя модифицировать заголовочный файл библиотеки. Не знаю, есть ли у тебя такая возможность.