Форум программистов, компьютерный форум CyberForum.ru
Наши страницы

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
 
Рейтинг: Рейтинг темы: голосов - 1, средняя оценка - 4.00
ZwHook
-18 / 0 / 0
Регистрация: 23.06.2014
Сообщений: 29
#1

Как передать в функцию заранее неизвестное число параметров? - C++

01.07.2014, 20:47. Просмотров 1263. Ответов 18
Метки нет (Все метки)

как передать в функцию "func" разное число параметров? писать для каждого перегрузку, или можно передать array int??
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
01.07.2014, 20:47
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Как передать в функцию заранее неизвестное число параметров? (C++):

Как принять заранее неизвестное количество аргументов и передать их в конструктор? - C++
Допустим есть функция которая создает объект template<typename T> T* createObject(typename ...params) { return new...

функция на неизвестное число параметров - C++
Здравствуйте, требуется создать функцию void f(), которая будет принимать от 0 до n параметров типа HMENU, как это реализовать?

Как передать в функцию указатель на двумерный массив заранее неизвестного размера? - C++
Ребята, скажите пожалуйста, как реализовать такую идею? Необходимо передать в функцию двумерный массив, чтобы она изменала его элементы....

Как передать в функцию в качестве параметров указатель на файл - C++
В общем есть функция (Copy_System_Files_To_New_System_Files), которая должна делать 4 раза одно и тоже действие, только с разными...

Как передать в функцию число и структуру побайтно? - C++
Здравствуйте!!! Нужно написать функцию которая принимает некую структуру и число побайтно.

Cоздание неизвестное заранее количество переменных - C++
Здравствуйте. Как осуществить создание неизвестное заранее количество переменных? Например пользователь вводит число k, а программа...

18
nmcf
5350 / 4670 / 1562
Регистрация: 14.04.2014
Сообщений: 18,606
01.07.2014, 20:51 #2
Разное число однотипных или разнотипных?
0
ZwHook
-18 / 0 / 0
Регистрация: 23.06.2014
Сообщений: 29
01.07.2014, 21:01  [ТС] #3
однотипных, все равно в стеке все 32битное.

Добавлено через 28 секунд
и еще вопрос почему так нельзя
C++
1
void (*func)(LPVOID Text,LPVOID Type,LPVOID Target)=(LPVOID)0x12345678;
0
nmcf
5350 / 4670 / 1562
Регистрация: 14.04.2014
Сообщений: 18,606
01.07.2014, 21:01 #4
Ну тогда передавай ссылку на массив с этими параметрами и их количество.
0
ZwHook
-18 / 0 / 0
Регистрация: 23.06.2014
Сообщений: 29
01.07.2014, 21:04  [ТС] #5
Нет не получиться, передасть ссылка на массив и все
push array
call 0x12345678

а надо
push 1
push 2
push 3
...
push n
call 0x12345678
0
nmcf
5350 / 4670 / 1562
Регистрация: 14.04.2014
Сообщений: 18,606
01.07.2014, 21:08 #6
Ассемблер-то тут причём?
Чем плоха ссылка? Надо обязательно в стек их помещать?
Используй тогда многоточие. http://ci-plus-plus-snachala.ru/?p=63
1
zss
Модератор
Эксперт С++
6477 / 6040 / 1981
Регистрация: 18.12.2011
Сообщений: 15,648
Завершенные тесты: 1
01.07.2014, 21:12 #7
Почитайте это
http://www.rsdn.ru/forum/cpp/418970.1
Вот пример оттуда
C++
1
2
3
4
5
6
7
8
9
10
double f(double n, ...)    //--заголовок с переменным числом параметров
{   double *p = &n;        //--установились на начало списка параметров
    double sum = 0, count = 0;    
    while (*p)         //--пока аргумент не равен нулю
    { sum+=(*p);         //--суммируем аргумент
      p++;             //--«перемещаемся на следующий аргумент
      count++;         //--считаем  количество аргументов
    }
    return ((sum)?sum/count:0);    //--вычисляем среднее
}
0
ZwHook
-18 / 0 / 0
Регистрация: 23.06.2014
Сообщений: 29
01.07.2014, 21:12  [ТС] #8
то что надо!!! просто параметры передаются в не управляеймый код(
0
Voivoid
675 / 278 / 12
Регистрация: 31.03.2013
Сообщений: 1,339
01.07.2014, 21:14 #9
Цитата Сообщение от zss Посмотреть сообщение
Почитайте это
Не, не надо это читать, разве что в качестве примера, как делать НЕ нужно. Не нужно доставать C'шное наследие из гроба. А нужно или, как уже посоветовали, использовать контейнер ( тот же std::vector ), или variadic templates
0
ZwHook
-18 / 0 / 0
Регистрация: 23.06.2014
Сообщений: 29
01.07.2014, 21:23  [ТС] #10
но допустим

C++
1
2
3
4
5
6
7
typedef void   (_stdcall *F )(int a,....);
 
void func(int a,...)
{
 
 
}
как мне вызвать функцию ф из моей функции с теми же параметрами что была вызвана моя функция?

даже точнее будет я буду считывать параметры из памяти, где их будет хз сколько, а потом передавать в F

Добавлено через 5 минут
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
typedef void (_stdcall *F )(int a,....);
 
void func(int a,...)
{
asm
{
push 1
push 2
push 3
 
}
f();
}
так можно? нужно что то типо этого, по идее все 3 параметра пойдут в функцию
0
Tulosba
:)
Эксперт С++
4396 / 3232 / 297
Регистрация: 19.02.2013
Сообщений: 9,045
01.07.2014, 21:24 #11
Цитата Сообщение от ZwHook Посмотреть сообщение
как мне вызвать функцию ф из моей функции с теми же параметрами что была вызвана моя функция?
Никак, если для функции F не будет варианта с va_list.
0
DrOffset
7351 / 4451 / 1009
Регистрация: 30.01.2014
Сообщений: 7,293
01.07.2014, 21:30 #12
Цитата Сообщение от ZwHook Посмотреть сообщение
как мне вызвать функцию ф из моей функции с теми же параметрами что была вызвана моя функция?
В таком виде - никак. Нужно, чтобы вызываемая из твоей функции поддерживала va_list, если такого нет, то никак.
Variadic templates тут только помогут, но это только С++11.
C++
1
2
3
4
5
template <typename ...T>
void func(T... args)
{
    foo(args...);
}
Добавлено через 3 минуты
Цитата Сообщение от ZwHook Посмотреть сообщение
даже точнее будет я буду считывать параметры из памяти, где их будет хз сколько, а потом передавать в F
Лучше расскажи про природу этой F подробнее.
0
ZwHook
-18 / 0 / 0
Регистрация: 23.06.2014
Сообщений: 29
01.07.2014, 21:48  [ТС] #13
F функция, неуправляемом функция в коде которая собирает пакет, для отправки по сети... вот и все, тоесть передаю int i 1, s i 2, и тд единственное в эту функцию обязательно передается параметр для сборки пакета например dddsc(как с принт ф) и она по нему собирает пакет, самое интересное что она написана на c++ тоже, жалко видимо придется писать множество перегрузов вызова, или на асме(((
0
DrOffset
7351 / 4451 / 1009
Регистрация: 30.01.2014
Сообщений: 7,293
01.07.2014, 22:08 #14
Цитата Сообщение от ZwHook Посмотреть сообщение
самое интересное что она написана на c++ тоже
А сигнатура у нее какая?
0
ZwHook
-18 / 0 / 0
Регистрация: 23.06.2014
Сообщений: 29
01.07.2014, 22:36  [ТС] #15
Вы меня все таки все обманули в длл пишем:
C++
1
2
3
4
5
extern "C" __declspec(dllexport) void _stdcall  writefunk(int a,int b)
{
    _itoa(a+b,bufstr,10);
    MessageBoxA(0,bufstr,"var",0);
}
в программе
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
typedef void (_stdcall *F)();
 
int _tmain(int argc, _TCHAR* argv[])
{
    int a=5;
    int b = 8;
    HMODULE hnd = LoadLibraryA("test.dll");
    F f=(F)GetProcAddress(hnd,"_writefunk@8");
    _asm
    {
    push a;
    push b; 
    }
    
    f();
    return 0;
}
получаем мессендж бокс 13), проблема решена всем спасибо
0
01.07.2014, 22:36
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
01.07.2014, 22:36
Привет! Вот еще темы с ответами:

Передать в функцию с переменным числом параметров УКАЗАТЕЛИ на другие функции - C++
void sum(int first, ...) { void (*l)() = (&amp;first+1); //ведь там в стеке все аргументы l(); } вот в таком стиле..(это...

В функцию с переменным, числом параметров передать массивы целых чисел - C++
#include &lt;iostream&gt; void main() { void func(int k, ...); int x = { 15, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15 }, ...

Не могу разобраться как передать корректно передать массив из функции в функцию - C++
//--------------------------------------------------------------------------- #pragma hdrstop ...

Передать в функцию целое число. Функция заменяет его на ближайшее простое число, которое больше или меньше исходного. Вернуться в main( ) и распечатат - C++
Передать в функцию целое число. Функция заменяет его на ближайшее простое число, которое больше или меньше исходного. Вернуться в main( ) и...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
15
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru