Задать вопрос
@ColdSpirit

Как сделать экпортируемую dll функцию без хедера членом класса?

Добрый день.
Имеется некая dll без хедера, подгружаю ее методом LoadLibrary, после хочу подгрузить из нее экспортируемую функцию методом GetProcAddress, допустим объявление функции в ней такое:
int add( int, int );

Проблема вот в чем - нужно создать класс, с функцией int add( int, int );, причем чтобы функция класса прямо указывала на функцию dll, не оборачивая ее, и я мог ее использовать как обычную функцию вот так:
int summ = someclass->add(5,6);

Сам так пытался сделать, но запутался в ссылках и указателях, пока что использую typedef, а функция у меня хранится как член класса (void*), и вызвать я ее могу только после приведения типа к типу FUNC_ADD.

#upd:
Про передачу this как параметра и не догадывался. Вообще кажется странным, что в таком мощном языке нельзя провернуть подобный трюк.
Спасибо за ответы =)
  • Вопрос задан
  • 282 просмотра
Подписаться 1 Оценить 1 комментарий
Решения вопроса 2
petermzg
@petermzg
Самый лучший программист
У вас нет понимания, чем метод от функции отличается
someclass->add(5,6);
имеет 3 входных параметра, а
int add( int, int );
всего 2.
Так что без оборачивания ничего не выйдет.
Ответ написан
Комментировать
Nipheris
@Nipheris Куратор тега C++
Совершенно верно Петр говорит, this в мешке не утаишь).

Кроме того, если либа грузится через LoadLibrary, т.е. связывания на этапе компиляции нет, то и вызывать ее надо через указатель, а тогда без обертки соответствие между какой-либо функцией, объявленной в классе (пусть даже это будет статическая функция) и этим указателем не проставить в принципе, т.к. где-то должна произойти косвенная адресация и передача управления в DLL.
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы