Страница: 1 |
Вопрос: Проблема с использованием WinApi функции | Добавлено: 05.06.11 17:47 |
Автор вопроса: ![]() |
Public Class Form1
Declare Auto Function GetFileInfo Lib "kernel32.dll" Alias "GetFileInformationByHandle" ( ByVal hwnd As Integer) As some Public Structure some Dim dwFileAttributes As Integer Dim ftCreationTime As Filetime1 Dim ftLastAccessTime As Filetime2 Dim ftLastWriteTime As Filetime3 Dim dwVolumeSerialNumber As Integer Dim nFileSizeHigh As Integer Dim nFileSizeLow As Integer Dim nNumberOfLinks As Integer Dim nFileIndexHigh As Integer Dim nFileIndexLow As Integer End Structure Public Structure Filetime1 Dim dwLowDateTime As Integer Dim dwHighDateTime As Integer End Structure Public Structure Filetime2 Dim dwLowDateTime As Integer Dim dwHighDateTime As Integer End Structure Public Structure Filetime3 Dim dwLowDateTime As Integer Dim dwHighDateTime As Integer End Structure Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load Dim f As New some Dim hwnd As Integer hwnd = &H2A4 // Дескриптор файла для доступа f = GetFileInfo(hwnd) // Собственно,доступ получаем : ) MsgBox(любое поле структуры) // Для проверки работоспособности End Sub End Class Возвращает постоянно 0,а почему - непонятно.Судя по ошибке,дело в передаваемых параметрах,но так как я новичек,то проблему найти не могу.Может,это сможете сделать вы... Также встаёт вопрос - как извратиться,чтобы в мсгбоксе любой тип данных выводился,если это возможно ? Используемая среда: Visual Studio |
Ответы | Всего ответов: 11 |
Номер ответа: 1 Автор ответа: ![]() ![]() Вопросов: 0 Ответов: 140 |
Профиль | Цитата | #1 | Добавлено: 05.06.11 19:57 |
GetFileInfo объявлена не верно, структура Filetime зачем-то продублирована несколько раз, хендл файла почему-то константа и вообще, зачем API, есть System.IO.FileInfo.
|
Номер ответа: 2 Автор ответа: ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ICQ: 6977577 Вопросов: 3 Ответов: 9 |
Профиль | Цитата | #2 | Добавлено: 05.06.11 21:06 |
Спасибочки...будем курить![]() |
Номер ответа: 3 Автор ответа: ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ICQ: 6977577 Вопросов: 3 Ответов: 9 |
Профиль | Цитата | #3 | Добавлено: 05.06.11 21:15 |
Да,со структурами я явно переборщил - мне почему-то показалось,что в них содержатся разные данные ))))(увидел ошибку),а по поводу хендла - разве он не как Integer объявляется(число ведь)? ( В DEV-CPP выходило как HWND hwnd ),или я опять что-то проглядел ? ![]() |
Номер ответа: 4 Автор ответа: ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ICQ: 6977577 Вопросов: 3 Ответов: 9 |
Профиль | Цитата | #4 | Добавлено: 05.06.11 21:19 |
По поводу объявления структур - думал,что её можно обозвать по собственному выбору,а потом просто передать её и всё...Выходит,что нельзя![]() |
Номер ответа: 5 Автор ответа: ![]() ![]() Вопросов: 0 Ответов: 140 |
Профиль | Цитата | #5 | Добавлено: 05.06.11 22:06 |
По поводу объявления структур - называй как хочешь, у тебя это просто ошибка стилистики, что классические веши в WIN32API обзываешь по своему. Но грубейшая ошибка ожидать что апи-функции возврашают структуры. Все они (за редчайшим исключением) возврашают 32-битное целое.
Dim hfile as Integer,sz1 as Integer... это уже я ошибся, пока набирал. |
Номер ответа: 6 Автор ответа: ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ICQ: 6977577 Вопросов: 3 Ответов: 9 |
Профиль | Цитата | #6 | Добавлено: 05.06.11 22:15 |
Теперь вижу...Она BOOL возвращала(.А почему ошибки не было,если ты прописал её как GetFileInfo(hfile, hfinfo),но она же не void... |
Номер ответа: 7 Автор ответа: ![]() ![]() Вопросов: 0 Ответов: 140 |
Профиль | Цитата | #7 | Добавлено: 05.06.11 22:35 |
У меня она объявлена (декларирована) as Integer.
И ее вызов GetFileInfo(hfile, hfinfo) возвращает, разумеется, Integer. dim somevar as Object = 666 'курим. |
Номер ответа: 8 Автор ответа: ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() Разработчик Вопросов: 130 Ответов: 6602 |
Профиль | Цитата | #8 | Добавлено: 06.06.11 05:50 |
Wlad пишет:
а по поводу хендла - разве он не как Integer объявляется(число ведь)? Хендл обычно объявляется как IntPtr, это структура, которая имеет размер 4 или 8 байт в зависимости от архитектуры приложения (32-битное или 64-битное). |
Номер ответа: 9 Автор ответа: ![]() ![]() Вопросов: 0 Ответов: 140 |
Профиль | Цитата | #9 | Добавлено: 07.06.11 00:09 |
Но правда очень своеобразная, с одним полем, которое даже не используется. DECLARE_HANDLE(name) struct name##__{int unused;};typedef struct name##__ *name Что в переводе означает, что хендл есть указатель на структуру, и будь у нее хоть 20 полей, размер указателя от этого не изменится. Так, мысли вслух. |
Номер ответа: 10 Автор ответа: ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() Разработчик Вопросов: 130 Ответов: 6602 |
Профиль | Цитата | #10 | Добавлено: 08.06.11 11:58 |
Не понимаю что тут своеобразного? В исходниках IntPtr это хорошо видно.
Документация также это подтверждает
|
Номер ответа: 11 Автор ответа: ![]() ![]() Вопросов: 0 Ответов: 140 |
Профиль | Цитата | #11 | Добавлено: 08.06.11 12:44 |
Ну, конечно, все это схоластика, но какова суть хендла. Что означает само число, представленное им?
Ресурс, указатель-на-указатель структуры в "неуправляемой" памяти. И когда я говорил о своеобразности, я имел ввиду не структуру IntPtr. |
Страница: 1 |
|