Модераторы: bsa

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> присвоить указатель на метод 
:(
    Опции темы
UnrealMan
Дата 9.12.2008, 21:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 722
Регистрация: 30.3.2006

Репутация: 5
Всего: 32



Цитата(mes @  9.12.2008,  21:47 Найти цитируемый пост)
насчет большинства машин, у автора оговорка была (правда не в этой теме), что его устраивает зависимое решение, для его задачи.

Неужели автор - редкий счастливиц, обладающий платформой с размером указателя на нестатическую функцию, равным sizeof(int)? Интересно было бы узнать, однако smile

Добавлено через 49 секунд
reinterpret_cast-ы между целыми и указателями на члены всё-таки неспроста не хотят компилироваться.
PM MAIL   Вверх
GoldFinch
Дата 9.12.2008, 22:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата



****


Профиль
Группа: Завсегдатай
Сообщений: 2141
Регистрация: 30.11.2008

Репутация: 6
Всего: 26



если что я решил эту проблему как 
#define HOOK_PTR(rva,hook) __asm mov dword ptr [eax+rva],offset hook
PM MAIL ICQ   Вверх
mes
Дата 9.12.2008, 22:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


любитель
****


Профиль
Группа: Участник Клуба
Сообщений: 7954
Регистрация: 14.1.2006

Репутация: 79
Всего: 250



Цитата(UnrealMan @  9.12.2008,  21:54 Найти цитируемый пост)
обладающий платформой с размером указателя на нестатическую функцию, равным sizeof(int)? 

думаю что нет.. у меня например размер  (оказывается) равен 8 байтам.  )

Цитата(UnrealMan @  9.12.2008,  21:54 Найти цитируемый пост)
reinterpret_cast-ы между целыми и указателями на члены всё-таки неспроста не хотят компилироваться. 

поэтому и хак

Добавлено через 2 минуты и 27 секунд
Цитата(GoldFinch @  9.12.2008,  22:11 Найти цитируемый пост)
если что я решил эту проблему как 
#define HOOK_PTR(rva,hook) __asm mov dword ptr [eax+rva],offset hook 

тоже хак ))
кстати обратите внимание, на подсказку UnrealMan о длине указазателя на метод.




--------------------
PM MAIL WWW   Вверх
GoldFinch
Дата 9.12.2008, 22:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата



****


Профиль
Группа: Завсегдатай
Сообщений: 2141
Регистрация: 30.11.2008

Репутация: 6
Всего: 26



mes, так-то оно так, да только offset xxx::yyy всегда 4 байта, ибо это реальный указатель на код
PM MAIL ICQ   Вверх
J0ker
Дата 9.12.2008, 23:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 986
Регистрация: 17.9.2008

Репутация: 9
Всего: 14



Цитата(UnrealMan @  9.12.2008,  21:54 Найти цитируемый пост)
Неужели автор - редкий счастливиц, обладающий платформой с размером указателя на нестатическую функцию, равным sizeof(int)?

ээээ
я что-то пропустил?
Код

struct B
{
};

typedef void(B::*tptr)();

int _tmain(int argc, _TCHAR* argv[])
{
    cout << sizeof(int) << endl;
    cout << sizeof(tptr) << endl;

    return 0;
}


4
4




--------------------
user posted image
PM MAIL   Вверх
mes
Дата 9.12.2008, 23:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


любитель
****


Профиль
Группа: Участник Клуба
Сообщений: 7954
Регистрация: 14.1.2006

Репутация: 79
Всего: 250



Цитата(J0ker @  9.12.2008,  23:32 Найти цитируемый пост)
   cout << sizeof(int) << endl;
    cout << sizeof(tptr) << endl;

Цитата(J0ker @  9.12.2008,  23:32 Найти цитируемый пост)
я что-то пропустил?


странно.. у меня :
4
8




Это сообщение отредактировал(а) mes - 9.12.2008, 23:57


--------------------
PM MAIL WWW   Вверх
UnrealMan
Дата 10.12.2008, 01:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 722
Регистрация: 30.3.2006

Репутация: 5
Всего: 32



Цитата(J0ker @  9.12.2008,  23:32 Найти цитируемый пост)
ээээ
я что-то пропустил?

В VC++ проверял? Там всякое может быть, да smile Размер указателя на член почему-то варьируется от 4 до 16. У меня даже получалось для одного и того же объекта разные значения sizeof получать smile

Код
// A.cpp

#include <iostream>

struct B {};
struct D : virtual B
{
    void f () {};
};

void (D::*fptr)() = &D::f;

int main()
{
    std::cout << sizeof(fptr) << std::endl; // 12
    void show_size_of_fptr();
    show_size_of_fptr();
}

Код
// B.cpp

#include <iostream>

struct D;
extern void (D::*fptr)();

void show_size_of_fptr()
{
    std::cout << sizeof(fptr) << std::endl; // 16
}

PM MAIL   Вверх
J0ker
Дата 10.12.2008, 04:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 986
Регистрация: 17.9.2008

Репутация: 9
Всего: 14



Цитата(UnrealMan @  10.12.2008,  01:59 Найти цитируемый пост)
В VC++ проверял? Там всякое может быть, да smile Размер указателя на член почему-то варьируется от 4 до 16. У меня даже получалось для одного и того же объекта разные значения sizeof получать smile


Цитата(UnrealMan @  10.12.2008,  01:59 Найти цитируемый пост)
std::cout << sizeof(fptr) << std::endl; // 12


Цитата(UnrealMan @  10.12.2008,  01:59 Найти цитируемый пост)
std::cout << sizeof(fptr) << std::endl; // 16

ыыыыыыы  smile 
аааа
ааа почему?????? smile 
ниче не понимаю.... как-то никогда не задавался таким вопросом - всегда считал любой адрес совместимым с void*

Добавлено через 38 секунд
Цитата(UnrealMan @  10.12.2008,  01:59 Найти цитируемый пост)
В VC++ проверял?

да


--------------------
user posted image
PM MAIL   Вверх
J0ker
Дата 10.12.2008, 04:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 986
Регистрация: 17.9.2008

Репутация: 9
Всего: 14



вы будете смеяться, но под дебагером watch показывает 4 и там и там, а сами значения адреса ессесна 4-х байтовые, а распечатывается все равно 12 и 16...


--------------------
user posted image
PM MAIL   Вверх
mes
Дата 10.12.2008, 04:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


любитель
****


Профиль
Группа: Участник Клуба
Сообщений: 7954
Регистрация: 14.1.2006

Репутация: 79
Всего: 250



вот в этой статье  наткнулся на небольшое объяснение : http://www.rsdn.ru/article/cpp/fastdelegate.xml


--------------------
PM MAIL WWW   Вверх
J0ker
Дата 10.12.2008, 05:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 986
Регистрация: 17.9.2008

Репутация: 9
Всего: 14



о
все понял
дело во множественном наследовании
спасибо за интересную тему  smile

Добавлено через 1 минуту и 8 секунд
Цитата(mes @  10.12.2008,  04:59 Найти цитируемый пост)
вот в этой статье  наткнулся на небольшое объяснение : http://www.rsdn.ru/article/cpp/fastdelegate.xml 

здесь получше наверное
http://blogs.msdn.com/oldnewthing/archive/...2/09/70002.aspx


--------------------
user posted image
PM MAIL   Вверх
Ответ в темуСоздание новой темы Создание опроса
Правила форума "C/C++: Для новичков"
JackYF
bsa

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, JackYF, bsa.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Для новичков | Следующая тема »


 




[ Время генерации скрипта: 0.0887 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.