Форум программистов, компьютерный форум 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
16.08.2014, 15:44  [ТС]     Альтернативный вызов функции
Так, выкладываю первые тесты.
Тест первый, просто статически описал загрузку функции MessageBoxA. (хотя мучался долго, пока не дописал "_stdcall" в прототипе функция вызывалась, но на возврате значения вылезала ошибка и прога рушилась) Прикрепил архив, где Test1.exe это он и есть. Тест 1 работает.
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
//Test 1
#include "stdafx.h"
#include <iostream>
#include <conio.h>
#include <math.h>
#include "windows.h"
#include "windowsx.h"
#include <iostream>
#include <string.h>
 
using namespace std;
 
//typedef int(_stdcall *Make_func)(...);
typedef int(_stdcall *Make_func)(HWND, char *, char *, UINT);
 
int _tmain(int argc, _TCHAR* argv[])
{
    char fn[50]="MessageBoxA";
    int res=0;
    HMODULE hMod = LoadLibrary ("user32.dll");
    if(!hMod)
        cout << "Library not loaded" << endl;
    else
    {
        Make_func me = (Make_func)GetProcAddress(hMod,fn);
        if(!me)
            cout << "Function not loaded" << endl;
        else
        {
            res = me(NULL,"hi","message",NULL);
            cout << res << endl;
        }
        FreeLibrary (hMod);
    }
    getch();
    return 0;
}
Далее Тест2:
C++
1
2
typedef int(_stdcall *Make_func)(...);
//typedef int(_stdcall *Make_func)(HWND, char *, char *, UINT);
Просто заменил прототип, остальное всё так же.
Результат выполнения: MessageBox появляется, но как только его закрываеш вылезает ошибка:
Run-Time Check Failure #0 - The value of ESP was not properly saved across a function call. This is usually a result of calling a function declared with one calling convention with a function pointer declared with a different calling convention.
Видимо на возврате значения, хоть подобная ошибка вылезала и в первом тесте до тех пор пока я stdcall не дописал. Но в тесте 2 я уже не знаю куда копать. =(
Тест 2.exe так же в архиве.

П.С. Извиняюсь сразу за кучу инклюдов, я обычно не помню какие нужны, так что пихаю все подряд)))
Вложения
Тип файла: rar Test.rar (17.8 Кб, 1 просмотров)
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru