вызов не опубликованного метода по имени
От: GreenElf Беларусь  
Дата: 19.05.05 09:16
Оценка:
Например:
typedef void __fastcall (__closure *TEvalMacroMethod)(void); //тип вызываемого метода

// p_ — объект TTable*
...
ShortString ProcName = "Next"; //имя метода

TMethod pmt_;
pmt_.Code = p_->MethodAddress(ProcName);
if (pmt_.Code) //здесь не проходит- потому что MethodAddress возвращает ссылки только на опубликованные методы
{
pmt_.Data = p_;
TEvalMacroMethod DoProc = *(TEvalMacroMethod*) &pmt_;
DoProc();
}
Может кто сталкивался? Как обойти можно ?
Заранее благодарен
... << RSDN@Home 1.1.3 stable >>
Re: вызов не опубликованного метода по имени
От: Аноним  
Дата: 19.05.05 10:17
Оценка:
Здравствуйте, GreenElf, Вы писали:


GE>Например:

GE> typedef void __fastcall (__closure *TEvalMacroMethod)(void); //тип вызываемого метода

GE> // p_ — объект TTable*

GE> ...
GE> ShortString ProcName = "Next"; //имя метода

GE> TMethod pmt_;

GE> pmt_.Code = p_->MethodAddress(ProcName);
GE> if (pmt_.Code) //здесь не проходит- потому что MethodAddress возвращает ссылки только на опубликованные методы
GE> {
GE> pmt_.Data = p_;
GE> TEvalMacroMethod DoProc = *(TEvalMacroMethod*) &pmt_;
GE> DoProc();
GE> }
GE>Может кто сталкивался? Как обойти можно ?
GE>Заранее благодарен

Никак. Можешь, конечно, от TTable класс породить, а методы published сделать. Я бы, наверное, свою таблицу методов сделал. Скажем, на основе std::map<string,TMethod>. А то MethodAddress, помнится, банальным перебором работает.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.