опубликован 01-12-2001 16:09 MSK
Функция простая
а с чем ее едят сам понять не могу
Предположим мне надо считать сектор с гибкого диска
нашел пример на С++ (MFC) - но на этом языке писать
не умею. Только читать и то со словарем :)
Попробовал перевести на VB, но появилась проблема:насколько я понял сначала получаем хендл соответствующего драйвера
HANDLE hVxD=CreateFile("\\\\.\\vwin32",0,FILE_SHARE_READ|FILE_SHARE_WRITE,NULL,OPEN_EXISTING,0,NULL);
потом передаем его ф-ии DeviceIoControl, которая заставляет его
считать необходимые данные в буфер, также передаваемый функции по
ссылке
fResult = DeviceIoControl(hDev, VWIN32_DIOC_DOS_DRIVEINFO,
®, sizeof(reg),
®, sizeof(reg), &cb, 0);
буфер reg это структура:
typedef struct _DIOC_REGISTERS
{DWORD reg_EBX;
DWORD reg_EDX;
DWORD reg_ECX;
DWORD reg_EAX;
DWORD reg_EDI;
DWORD reg_ESI;
DWORD reg_Flags;
} DIOC_REGISTERS, *PDIOC_REGISTERS;
которая предварительно заполняется:
reg.reg_EAX = 0x7305;
reg.reg_EBX = (DWORD)&dio;
reg.reg_ECX = -1;
reg.reg_EDX = bDrive;
reg.reg_ESI = 0x6001;
********************************************************
* *
* наиболее интересен здесь второй параметр: *
* reg.reg_EBX = (DWORD)&dio; *
* параметр "reg.reg_EBX" хранит адрес структуры "dio" *
* *
********************************************************
dio это тоже структура:
typedef struct _DISKIO {
DWORD dwStartSector; // starting logical sector number
WORD wSectors; // number of sectors
DWORD dwBuffer; // address of read/write buffer
} DISKIO, * PDISKIO;
в целом пример исходника со всеми проверками и
декларациями есть на форуме по С++ здесь же.
В общем когда я попытался перевести на VB уперся в строчку
reg.reg_EBX = (DWORD)&dio;
выдал ошибку и встал, точнее лег - спать.
Не исключено, что если эту проблему побороть появятся новые...
Я ведь не супер программист - так для себя...
я вроде это посылал а оно куда-то делось :о