Информация об изменениях

Сообщение Re: Метод класс как С колбек от 09.04.2015 17:06

Изменено 09.04.2015 17:11 Zenden

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

AHO>Имеется С библиотека с неизменяемым интерфейсом, одна из функций выглядит так:

AHO>
AHO>typedef void(*Callback)(void * internalState, Data * data);
AHO>void addCallback(void * internalState, Callback * callback);
AHO>

AHO>internalState – сугубо внутренняя структура библиотеки, data – данные получаемые из библиотеки, т.е. никаких void * userData нет.

Для этого придумали Thunking.

http://zabkat.com/blog/hook-callback-thunk-x64.htm
http://www.codeproject.com/Articles/16785/Thunking-in-Win-Simplifying-Callbacks-to-Non-sta
http://www.codeproject.com/Articles/6731/Using-class-methods-as-callbacks
http://dj9okeyxktdvd.cloudfront.net/Articles/5717/Better-way-to-use-member-function-for-C-style-call

Одна проблема — это либо не компилируется / вылетает / либо статья старая, и автор не учитывает такую крутую штуку, как DEP.
А еще оно может съесть первый аргумент функции.
Re: Метод класс как С колбек
Здравствуйте, AHOHUM, Вы писали:

AHO>Имеется С библиотека с неизменяемым интерфейсом, одна из функций выглядит так:

AHO>
AHO>typedef void(*Callback)(void * internalState, Data * data);
AHO>void addCallback(void * internalState, Callback * callback);
AHO>

AHO>internalState – сугубо внутренняя структура библиотеки, data – данные получаемые из библиотеки, т.е. никаких void * userData нет.

Для этого придумали Thunking.

http://zabkat.com/blog/hook-callback-thunk-x64.htm
http://www.codeproject.com/Articles/16785/Thunking-in-Win-Simplifying-Callbacks-to-Non-sta
http://www.codeproject.com/Articles/6731/Using-class-methods-as-callbacks
http://dj9okeyxktdvd.cloudfront.net/Articles/5717/Better-way-to-use-member-function-for-C-style-call

Одна проблема — это либо не компилируется / вылетает / либо статья старая, и автор не учитывает такую крутую штуку, как DEP.
А еще оно может съесть первый аргумент функции.

Не подскажет аль кто живой проект, и чтоб оно не съедало первый аргумент функции?