WWW.ИСХОДНИКИ.РУ cpp.sources.ru
java.sources.ru web.sources.ru soft.sources.ru
jdbc.sources.ru asp.sources.ru api.sources.ru

  Форум на исходниках
  Visual Basic
  указатель на переменную

СПРОСИТЬ  ОТВЕТИТЬ
профайл | регистрация | faq

Автор Тема:   указатель на переменную
ssergey опубликован 27-11-2001 15:57 MSK   Click Here to See the Profile for ssergey   Click Here to Email ssergey  
Люди добрые
надо послать в DLL-ку указатель на переменную
сложность в том, что указатель нужно послать
в составе структуры, т.е. надо сделать:
A.pointer = указатель на переменную B
можно-ли так сделать в VisualBasic
Спасибо
7in опубликован 28-11-2001 21:26 MSK     Click Here to See the Profile for 7in  Click Here to Email 7in     
Вообще, интересно... а можно узнать, что за функция и с чем её едят?
ssergey опубликован 01-12-2001 16:09 MSK     Click Here to See the Profile for ssergey  Click Here to Email ssergey     
Функция простая
а с чем ее едят сам понять не могу
Предположим мне надо считать сектор с гибкого диска
нашел пример на С++ (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;
выдал ошибку и встал, точнее лег - спать.

Не исключено, что если эту проблему побороть появятся новые...
Я ведь не супер программист - так для себя...

я вроде это посылал а оно куда-то делось :о

ssergey опубликован 01-12-2001 16:16 MSK     Click Here to See the Profile for ssergey  Click Here to Email ssergey     
нашел!!!!!
как говорил Архимед
я ее случайно на форум по С++ отправил
ну и чайник.....

З.Ы.
форум автоматически заменяет
(амперсанд)reg
на символ ®

ssergey опубликован 08-12-2001 10:46 MSK     Click Here to See the Profile for ssergey  Click Here to Email ssergey     
ЛЮДИ!
Скажите пожалуйста, если это невозможно в принципе.
Lamer опубликован 08-12-2001 18:11 MSK     Click Here to See the Profile for Lamer  Click Here to Email Lamer     
Ну почему, адрес получить можно, но стоит ли использовать косвенный вызов в VB? Это достаточно ненадёжно!
ssergey опубликован 09-12-2001 18:21 MSK     Click Here to See the Profile for ssergey  Click Here to Email ssergey     
я с удовольствием не пользовался бы этим,
но вызов функции требует
Есть исходник на VC++
однако хотелось перевести на родной ВАСИК
al опубликован 10-12-2001 14:50 MSK     Click Here to See the Profile for al  Click Here to Email al     
Я бы написал маленюкую ActiveX DLL на C++, которая вызывает ту хитрую функцию с передачей адреса.

СПРОСИТЬ  ОТВЕТИТЬ
Перейти:


E-mail | WWW.ИСХОДНИКИ.RU

Powered by: Ultimate Bulletin Board, Freeware Version 5.10a
Purchase our Licensed Version- which adds many more features!
© Infopop Corporation (formerly Madrona Park, Inc.), 1998 - 2000.