1 / 1 / 1
Регистрация: 29.09.2011
Сообщений: 57
1

Не работают WinAPI функции на Visual C++ 2010

05.09.2012, 19:22. Показов 2759. Ответов 7
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Нашёл у себя старые исходники на VC++ 6-й версии, там в обработчике кнопки просто пишешь например
GetFileSize("C:\pagefile.sys", razmer)
и всё работало. А здесь во-первых почему-то ругается на DWORD (его что убрали в новых версиях?),
во-вторых GetFileSize неизвестный оператор.
Экспериментировал с using System::WinAPI - не помогает.
Тоже самое с функцией GetWindowsVersionEx - она не работает.
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
05.09.2012, 19:22
Ответы с готовыми решениями:

Проект WinAPI в Visual C++ 2010
Я хочу написать приложение на чистом WinAPI, т.е. проет будет WinAPI. Вопрос: будет ли приложение...

Не работают try-catch в visual studio 2010
Не работают try-catch в visual studio 2010. Лет пять назад, в vs 2008, все работало, в Qt 5.6 MINGW...

Как работают функции WinAPI?
Объясните пож. как работают Api функции

Две одинаковые функции работают по-разному. WinApi + asm
Задача: ввести строку(winapi), удалить пробелы(asm) и вывести измененную строку(без...

7
Модератор
Эксперт по электронике
8908 / 6677 / 918
Регистрация: 14.02.2011
Сообщений: 23,516
05.09.2012, 21:21 2
вот что говорит msdn
DWORD WINAPI GetFileSize(
__in HANDLE hFile,
__out_opt LPDWORD lpFileSizeHigh
);
как видишь второй параметр это указатель
сделай так
C++
1
GetFileSize("C:\pagefile.sys", &razmer)
и в razmer вернется размер файла

Добавлено через 35 секунд
вот что говорит msdn
DWORD WINAPI GetFileSize(
__in HANDLE hFile,
__out_opt LPDWORD lpFileSizeHigh
);
как видишь второй параметр это указатель
сделай так
C++
1
GetFileSize("C:\pagefile.sys", &razmer)
и в razmer вернется размер файла
0
1 / 1 / 1
Регистрация: 29.09.2011
Сообщений: 57
05.09.2012, 21:31  [ТС] 3
Да это здесь не причем,у меня похоже функция не задекларирована.
Более простой пример:
GetLastError(); - неизвестный идентификатор
Надо прописать перед этим DWORD WINAPI GetLastError(void); ? И в какое место это засунуть
0
Модератор
Эксперт по электронике
8908 / 6677 / 918
Регистрация: 14.02.2011
Сообщений: 23,516
05.09.2012, 21:39 4
извини глюк с инетом
продублировалось недописанное сообщение
вернется старшая часть размера файла
далее


Цитата Сообщение от calypso Посмотреть сообщение
GetWindowsVersionEx
MSDN не нашел есть
BOOL WINAPI GetVersionEx(
__inout LPOSVERSIONINFO lpVersionInfo
);
Цитата Сообщение от calypso Посмотреть сообщение
GetLastError(); - неизвестный идентификатор
а заголовочные файлы подключил???

для GetVersionEx GetLastError GetFileSize
Declared in Winbase.h; include Windows.h.
0
1 / 1 / 1
Регистрация: 29.09.2011
Сообщений: 57
05.09.2012, 21:46  [ТС] 5
MyProgram.cpp
C++
1
2
3
4
5
6
7
8
9
10
11
12
#include "stdafx.h"
#include "Form1.h"
#include "Windows.h"
 
Form1.h
private: System::Void button1_Click(System::Object^  sender, System::EventArgs^  e) {
                 int razmer=65536;
                 textBox1->Text="Привет";
                 double filesize;
                 GetFileSizeEx("C:\pagefile.sys",&filesize);
                 GetLastError();
             }
: error C3861: GetFileSizeEx: идентификатор не найден
error C3861: GetLastError: идентификатор не найден
0
Модератор
Эксперт по электронике
8908 / 6677 / 918
Регистрация: 14.02.2011
Сообщений: 23,516
05.09.2012, 21:53 6
с cli\clr я знаком слабо
попробуй явно указать что она глобальная
C++
1
::GetFileSizeEx(
Добавлено через 2 минуты
подожди у тебя
#include "Windows.h" объявлен в MyProgram.cpp
а используешь функции ты в Form1.h
в нем и подключай "Windows.h"

Добавлено через 1 минуту
или попробуй поменять местами
C++
1
2
3
#include "stdafx.h"
 #include "Windows.h"
 #include "Form1.h"
0
1 / 1 / 1
Регистрация: 29.09.2011
Сообщений: 57
05.09.2012, 22:11  [ТС] 7
Да в хедере прописал include windows.h и заработало.
Только на эту шнягу ещё ругается:
error C2664: GetFileSizeEx: невозможно преобразовать параметр 2 из 'DWORD *' в 'PLARGE_INTEGER'
Так работает:
C++
1
2
3
4
                 DWORD filesize;
                 GetFileSize("C:\pagefile.sys",&filesize);
                 GetLastError();
                 textBox1->Text=filesize.ToString();
Добавлено через 2 минуты
Если filesize сделать PLARGE_INTEGER ,тогда ругается тут:
error C2228: выражение слева от ".ToString" должно представлять класс, структуру или объединение
тип: PLARGE_INTEGER
возможно, имеется в виду '->'
0
Эксперт С++
2924 / 1274 / 114
Регистрация: 27.05.2008
Сообщений: 3,465
06.09.2012, 15:06 8
Используй FileInfo::Length
0
06.09.2012, 15:06
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
06.09.2012, 15:06
Помогаю со студенческими работами здесь

Чем отличается Microsoft Visual C++ 2010 Express от Visual Studio 2010 Ultimate
Подскажите пожалуйста, в чем разница Microsoft Visual C++ 2010 Express от Visual Studio 2010...

Функции. Сортировка вставками (Visual Studio 2010 C++)
Пожалуйста, помогите. Задача: Сортировка вставками. Написать программу, в которой введенный...

Vba Microsoft visual studio 2010 Функции для записи в файл
Работа с файлами Vba Microsoft visual studio 2010. Подскажите функции для записи в файл

Подключение и работа с базой данных MS Access 2010 в Visual Studio 2010: VB
Доброго времени суток! Уважаемые гуру програмирования, не моглибы Вы помочь начинающему! ...


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

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

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