копирование стека параметров функции
От: __Andrey__  
Дата: 16.09.02 06:53
Оценка:
Идея в следующем :

void Func1(IObj* aObj,int param1,int param2,long param3)
{
return Func2(aObj,param1,param2,param3);
}

void Func2(IObj& aObj,...)
{
asm
{
; вызвать функцию Func3
; так чтобы она получила все параметры
}
}

void Func3(int param1,int param2,long param3)
{

}
Re: копирование стека параметров функции
От: bnk СССР http://unmanagedvisio.com/
Дата: 16.09.02 07:13
Оценка:
Здравствуйте __Andrey__, Вы писали:

А стандартным спсобом (через va_list) чем-то не устраивает ?
Т.е. что мешает написать так

void Func2(IObj& aObj,...) 
{ 
  va_list marker;
  va_start(marker, aObj);
  int param1 = va_arg(marker, int);
  int param2 = va_arg(marker, int);
  long param3 = va_arg(marker, long);
  Func3(param1, param2, param3);
  va_end(marker);
} 

void Func3(int param1,int param2,long param3) 
{ 
}
Re[2]: копирование стека параметров функции
От: __Andrey__  
Дата: 16.09.02 07:29
Оценка:
Здравствуйте bnk, Вы писали:

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


bnk>А стандартным спсобом (через va_list) чем-то не устраивает ?

bnk>Т.е. что мешает написать так

bnk>
bnk>void Func2(IObj& aObj,...) 
bnk>{ 
bnk>  va_list marker;
bnk>  va_start(marker, aObj);
bnk>  int param1 = va_arg(marker, int);
bnk>  int param2 = va_arg(marker, int);
bnk>  long param3 = va_arg(marker, long);
bnk>  Func3(param1, param2, param3);
bnk>  va_end(marker);
bnk>} 

bnk>void Func3(int param1,int param2,long param3) 
bnk>{ 
bnk>}
bnk>


Тут все несколько сложнее.
Нужно решение с помощью которого
функции могут иметь любые параметры.
Первый всегда — указатель на некий обьект
остальные неизвестны и любое количество.

Т.е. в конечном итоге как я это вижу —
одно решение на любое количество параметров через один два макроса.

1 —

viod iFunc1(IObj* a,int a1,long a2,char a3)
{
return sFunc1(a,a1,a2,a3);
}
void sFunc1(IObj* a,...)
{
// общее рещение на передачу пораметров в
// return Func1()
}
void Func1(int a1,long a2,char a3)
{
// ...
}

2 —

viod iFunc2(IObj* a,char* a3)
{
return sFunc1(a,a3);
}
void sFunc2(IObj* a,...)
{
// общее рещение на передачу пораметров в
// return Func2()
}
void Func2(char* a3)
{
// ...
}

к сожалению Выше решение
возможно только если знать типы и количество параметров.
сдесь этого нет.
Re: копирование стека параметров функции
От: Sergey Россия  
Дата: 16.09.02 08:22
Оценка:
Здравствуйте __Andrey__, Вы писали:

A>Идея в следующем :


A>void Func1(IObj* aObj,int param1,int param2,long param3)

A>{
A>return Func2(aObj,param1,param2,param3);
A>}

A>void Func2(IObj& aObj,...)

A>{
A>asm
A>{
A>; вызвать функцию Func3
A>; так чтобы она получила все параметры
A>}
A>}

A>void Func3(int param1,int param2,long param3)

A>{

A>}


Задача в такой постановке не имеет решения.
Если же задачу требуется решить для удовлетворения какой-либо практической необходимости, то выкрутиться наверняка можно — но постановочку придется переформулировать.
Одним из 33 полных кавалеров ордена "За заслуги перед Отечеством" является Геннадий Хазанов.
Re: Слепой делегатор
От: Vi2 Удмуртия http://www.adem.ru
Дата: 16.09.02 08:38
Оценка: 5 (1)
Здравствуйте __Andrey__, Вы писали:

A>Идея в следующем : ...


Раз уж ты используешь нотацию IObj, значит, пользуешь интерфейсы. Поэтому посмотри реализация "слепого делегатора" в статье Секреты маршалинга
Автор(ы): Чистяков В.Ю.
и рубрика "Создание универсального MBV-helper-объекта" от Кейза Брауна и Дона Бокса.
Vita
Выше головы не прыгнешь, ниже земли не упадешь, дальше границы не убежишь! © КВН НГУ
Re[2]: Слепой делегатор
От: __Andrey__  
Дата: 16.09.02 08:52
Оценка:
То что нужно.
Спасибо.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.