Форум программистов, компьютерный форум, киберфорум
C/C++: WinAPI
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.60/5: Рейтинг темы: голосов - 5, средняя оценка - 4.60
0 / 0 / 1
Регистрация: 22.05.2017
Сообщений: 15
1

Вызов функции из DLL

14.12.2017, 22:16. Показов 845. Ответов 4
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Здравствуйте. Я, вообще-то, на Си не писал никогда. Для моих нужд хватало делфи и VB, но тут появилась необходимость использовать функции из DLL, написаной на си. Из делфи и VB начались траблы - решил трохи освоить си и написал такой пробный код:
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
#include <iostream>
#include <cstdlib> // для system
#include <string>
#include "windows.h"
typedef INT32(CALLBACK* LPFNDLLFUNC1)(INT32, WCHAR*, UINT8);
using namespace std;
 
int main()
{
    
    HINSTANCE hDLL;
    LPFNDLLFUNC1 lpfnDllFunc1;
    
    hDLL = LoadLibraryA("C:\\Windows\\SysWOW64\\DEVICE\\usgo.dll");
    INT32 uReturnVal = 0;
    WCHAR* pTextDesc = 0;
    UINT8 Len = 10;
    if (hDLL != NULL)
    {
        lpfnDllFunc1 = (LPFNDLLFUNC1)GetProcAddress(hDLL, "GetCaptionDescription");
        if (!lpfnDllFunc1)
        {
            // handle the error  
            FreeLibrary(hDLL);
        }
        else
        {
            // call the function 
            
            uReturnVal = lpfnDllFunc1(10, pTextDesc, Len);
        }
        cout << "Результат " << uReturnVal << " Текст = " << pTextDesc << endl;
    }
    system("pause"); // Оставляет окно "Любая клавиша"
    return 0;
}
но тут тоже не всё так гладко. Код вызвал закрытие проги с кодом -1073740777. Описание функции выглядит так:

Функция возвращает текстовое описание строкового параметра библиотеки.
INT32 GetCaptionDescription (INT32 CaptionID, WCHAR* pDescription, UINT8 Length);
CaptionID – номер текстового описания строкового параметра
pDescription – указатель на строку описания названия
Length – максимальная длина строки в символах (pCaption)
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
14.12.2017, 22:16
Ответы с готовыми решениями:

Вызов функции из exe в который инжектирована dll
Как вызвать функцию из exe в который инжектирована dll(из этой dll) зная адрес функции(например...

Явное подключение DLL и вызов функции из неё
как сделать чтобы не было ошибки при нажатии справка-о программе case IDM_ABOUT:...

Вызов функции из DLL, показывающей DialogBox - WinAPI
1. Есть написанная вручную DLL, где есть находится функция вызова диалога. Я её динамически...

Dll вызов метода
Есть dll библиотека &quot;reser&quot; в ней есть метод ShowMess в которые передается строка. Как мне его...

4
7803 / 6567 / 2988
Регистрация: 14.04.2014
Сообщений: 28,706
14.12.2017, 23:22 2
C++
1
2
3
WCHAR pTextDesc[100];
 
uReturnVal = lpfnDllFunc1(10, pTextDesc, 100);
0
0 / 0 / 1
Регистрация: 22.05.2017
Сообщений: 15
15.12.2017, 10:32  [ТС] 3
Спасибо, почти помогло, но теперь ошибка Run Time:

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.
0
298 / 107 / 31
Регистрация: 12.03.2012
Сообщений: 449
15.12.2017, 12:37 4
Значит соглашение вызова у функции другое
можно попробовать убрать CALLBACK
0
4001 / 2548 / 428
Регистрация: 09.09.2017
Сообщений: 11,297
15.12.2017, 13:22 5
или добавить соглашение явным образом, __cdecl, __stdcall, __fastcall и т.д.
https://msdn.microsoft.com/ru-... x0h58.aspx
0
15.12.2017, 13:22
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
15.12.2017, 13:22
Помогаю со студенческими работами здесь

Вызов функции из dll
Доброго времени суток! Пытаюсь вызвать функцию, которая находится в библиотеке следующим способом:...

Вызов функции из dll. Dll не определена в коде и подключается программно
Я написал простую функцию которая возвращает негатив bitmap'а Function Negative(ByVal Bmp As...

Inject dll, а также вызов функции из этой же dll
Всем привет, заинжектить dll в другой процесс получилось, но еще необходимо вызвать функцию в этой...

Вызов функции DLL VB.NET в DLL C++
Как вызывать функции dll VB.NET через dll С++, которая приинжекчена к процессу проводника?


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

Или воспользуйтесь поиском по форуму:
5
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru