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

Альтернативный вызов функции - C++

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ СЛАУ. Метод обратной матрицы, метод Гаусса, метод Крамера, метод Зейделя http://www.cyberforum.ru/cpp/thread1242580.html
Помогите ребят. Не могу построить алгоритмы для этих методов Язык C++
C++ Разделить выпуклый многоугольник на 4 равные части двумя взаимно перпендикулярными прямыми Почти то же, что и тут: http://www.cyberforum.ru/java/thread1022760.html, но хочется решить на C++. А именно: Есть некоторый выпуклый многоугольник, который необходимо разделить на 4 равные части двумя взаимно перпендикулярными прямыми. Входные данные: количество вершин и их координаты в порядке обхода. Координаты не больше 10000, самих координат не больше 1500. Координаты все целочисленные.... http://www.cyberforum.ru/cpp/thread1242320.html
C++ Отследить изменение памяти сторонним процессом
Есть основное приложение1. Есть приложение2, которое считывает и изменяет его память. Надо отследить адреса, действие(чтение или запись), значение до и после действия. Куда копать?
Adobe PDF Library (APDFL) - поместить в формируемый документ картину формата PNG C++
Всем привет! Данная тема, возможно, не вполне подходит для данного раздела, поскольку вопрос, преимущественно имеет отношение к API Adobe PDF, конкретнее, к плюсовому API. Я пишу с использованием этой библиотеки от datalogics некоторое API для формирования PDF-документов. Сбился с ног, пытаясь запихать в формируемый документ (программно, разумеется) картину формата PNG. С JPEG проблем нет,...
C++ Электронная подпись+работа с сертификатами http://www.cyberforum.ru/cpp/thread1241481.html
Здравствуйте!дали задание,саму суть понял,не могу разобраться,как начать писать программу.помогите кто чем может. Вот само задание: Разработать приложение - утилиту командной строки, или с графической оболочкой (на выбор). Утилита должна решать следующие задачи: 1. По серийному номеру находить нужный сертификат из хранилища MY 2. Выводить на экран информацию о владельце, сроке действия, и об...
C++ Освобождение динамически созданных переменных (2-ого уровня) И так, продолжу старую тему про динамику. На этот раз есть вот что: #include <iostream> #include <stdio.h> #include <conio.h> #include <math.h> using namespace std; подробнее

Показать сообщение отдельно
Izual
94 / 119 / 6
Регистрация: 13.11.2012
Сообщений: 1,537
19.08.2014, 10:33  [ТС]     Альтернативный вызов функции
Да заработало (установил VS 2013). Только теперь всё же остался вопрос с возвращяемым значением, оно не во всех функциях будет int. Как я понял из void* в int только warning, а вот уже даже с float будет error.
Прототип через шаблон функции, который предложил StailGot можно как то привести к динамическому использованию возвращяемого результата? (чтоб и double, и многие другие работали?)

Добавлено через 20 минут
П.С. Поясню сразу, что таблица с значениями у меня будет, т.е. я буду заранее знать какой тип вводить и выводить.
Например:
WINUSERAPI int WINAPI MessageBoxA(HWND,LPCSTR,LPCSTR,UINT);
HMENU WINAPI LoadMenuA(HINSTANCE,LPCSTR);
WINUSERAPI HWND WINAPI SetActiveWindow(HWND);
Имея такую таблицу, я хотел бы имея структуру (с "вложенными" union и enum) вида:
C++
1
2
3
4
5
6
7
8
9
10
11
12
typedef enum { BOOL,INT,FLOAT,STR } vtr;
struct var
{
    vtr t;//тип переменной
    union
    {
        bool b;
        int i;
        float f;
        char *s;
    }d;//данные переменной
};
просто исходя из типа переменной (v[i].t) задать в функции возвращяемое значение.

Да и ещё меня инетересует, можно ли исходя из типа вызова с помощью каких нибудь директив указывать использование _stdcall, например хотел было сделать так:
C++
1
#define WINAPI _stdcall
Но не работает =)

Добавлено через 5 минут
Подумалось, по пункту возвращяемого значения...
Ведь я могу изменить функцию:
C++
1
int call( vtr v, void * fun, Args ... args)
и в соответствии с типом сделать (что конешно вот меня не радует прототипы вызова для всех возможных возвращяемых значений... Примерно:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
{
switch(v):
{
case INT:
 using func_type = int( _stdcall *)( Args... ); // выведем тип функции по ее аргументам
 return ( (func_type)fun ) ( args... );
break;
case FLOAT:
 using func_type = float( _stdcall *)( Args... ); // выведем тип функции по ее аргументам
 return ( (func_type)fun ) ( args... );
break;
...
}
}
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru