Форум программистов, компьютерный форум, киберфорум
Visual C++
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.90/41: Рейтинг темы: голосов - 41, средняя оценка - 4.90
33 / 27 / 5
Регистрация: 30.04.2014
Сообщений: 771
1

Загрузка DLL и ошибка "Run-Time Check Failure"

25.08.2014, 14:36. Показов 7502. Ответов 4
Метки нет (Все метки)

Здравствуйте.
Пытаюсь подключить ftdi.dll.

Код для начала простейший:

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
#include "stdafx.h"
#include <Windows.h>
#include <conio.h>
 
extern "C" {
#include "ftd2xx.h"
}
 
int a = 0;
HMODULE hLib;
DWORD numDevs;
FT_STATUS ftStatus;
FT_STATUS (*pFunction)(DWORD*);
typedef int(*functionDll)(DWORD*);
 
void main()
{
    hLib = LoadLibrary(L"D:\\libs_for_dll\\ftd2xx.dll");
    (FARPROC &)pFunction = GetProcAddress(hLib, "FT_CreateDeviceInfoList");
    functionDll fpFunction = (functionDll)GetProcAddress(hLib, "FT_CreateDeviceInfoList");
 
    // Создаем список устройств
    ftStatus = fpFunction(&numDevs);
    ftStatus = pFunction(&numDevs);
    printf("%i", numDevs);
    scanf("%x", &a);
}
Файл ftd2XX.h стандартный. Компилируется. При работе (при обращении к функции FT_CreateDeviceInfoList любым из двух способов) выдаёт сообщение:

C++
1
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.
В отладчике вижу, что указатель на функцию не нулевой, то есть он её находит. Скажите, что можно сделать?
0

Помощь в написании контрольных, курсовых и дипломных работ здесь.

Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
25.08.2014, 14:36
Ответы с готовыми решениями:

un-Time Check Failure #3
ошибок при компиляции нету, но появляется ошибка &quot;un-Time Check Failure #3 - The variable 'i' is...

Run-Time Check Failure #2 - Stack around the variable 'MX' was corrupted.
Решаю задачу. Вот код: #include &lt;iostream&gt; using namespace std; int main () { int S;...

Run-Time Check Failure #2 - Stack around the variable 'A' was corrupted
#include &lt;iostream&gt; #include &lt;iomanip&gt; using namespace std; int main() {...

Run-Time Check Failure #2 - Stack around the variable 'support_points_1' was corrupted
Ошибка вылетает на статический массив после завершения работы функции. Вроде как выход за...

4
Ушел с форума
Эксперт С++
16424 / 7398 / 1186
Регистрация: 02.05.2013
Сообщений: 11,637
Записей в блоге: 1
25.08.2014, 14:39 2
Лучший ответ Сообщение было отмечено Khludenkov как решение

Решение

Цитата Сообщение от Khludenkov Посмотреть сообщение
C++
1
2
FT_STATUS (*pFunction)(DWORD*);
typedef int(*functionDll)(DWORD*);
Поставить здесь правильный calling convention (_stdcall/_cdecl/_fastcall) в явном виде.
1
33 / 27 / 5
Регистрация: 30.04.2014
Сообщений: 771
25.08.2014, 15:01  [ТС] 3
Вот что он пишет:

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.
Добавлено через 47 секунд
Цитата Сообщение от Убежденный Посмотреть сообщение
правильный calling convention
Просто попробовать варианты?
Сейчас проверим.

Добавлено через 3 минуты
Прошу прощения, а как это указывается? Перед типом функции?

Добавлено через 4 минуты
Написано, что _cdecl пишется после типа функции.

C++
1
2
FT_STATUS _cdecl (*pFunction)(DWORD*);
typedef int _cdecl (*functionDll)(DWORD*);
Компилятор ругается, нехороший человек...

Добавлено через 1 минуту
Разобрался:


C++
1
2
FT_STATUS (_cdecl *pFunction)(DWORD*);
typedef int (_cdecl *functionDll)(DWORD*);
1
Ушел с форума
Эксперт С++
16424 / 7398 / 1186
Регистрация: 02.05.2013
Сообщений: 11,637
Записей в блоге: 1
25.08.2014, 15:02 4
Например:
C
1
typedef FT_STATUS (_stdcall * PFN_CREATEDEVINFOLIST)(DWORD * /* [out] pNumDevices */);
2
33 / 27 / 5
Регистрация: 30.04.2014
Сообщений: 771
25.08.2014, 15:04  [ТС] 5
Заработало. Спасибо!!!
Вызов был _stdcall.
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
25.08.2014, 15:04

Помощь в написании контрольных, курсовых и дипломных работ здесь.

Ошибка при "Поиске по базе": Run-Time Check Failure #2
Всплывает ошибка при &quot;Поиске по базе&quot; Run-Time Check Failure #2 - Stack around the variable 'A' was...

Ошибка "Run-Time Check Failure #2 - Stack around the variable '_16' was corrupted."
Посмотрев в интернете понял что эта проблема связана с выходом за пределы массива, однако у себя в...

Ошибка "Run-Time Check Failure #3"
#include&lt;iostream&gt; using namespace std; #define _USE_MATH_DEFINES #include&lt;math.h&gt; int...

Ошибка при работе с массивом: "Run-Time Check Failure #2 - Stack around the variable 'a' was corrupted."
Ребята, помогите пожалуйста, при комплиляции программы иногда вылезает строчка: &quot;Run-Time Check...


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

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

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