powered by simpleCommunicator - 2.0.60     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Delphi [игнор отключен] [закрыт для гостей] / как по ссылке (Pointer) вытянуть данные
3 сообщений из 3, страница 1 из 1
как по ссылке (Pointer) вытянуть данные
    #32372551
Soldat
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Возвращается ссылка на данные (Pointer)

Данные имеют такую структуру
typedef struct varstring_tag {
DWORD dwTotalSize;
DWORD dwNeededSize;
DWORD dwUsedSize;
DWORD dwStringFormat;
DWORD dwStringSize;
DWORD dwStringOffset;
} VARSTRING, FAR *LPVARSTRING;

Как отсюда выдрать данные
...
Рейтинг: 0 / 0
как по ссылке (Pointer) вытянуть данные
    #32372626
Дмитрий Мыльников
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Во первых, советую псомотреть в файле windows.pas как точно описана эта структура, поскольку ты приводишь описание на C
Обычно имена совподают, так что ищи по имени.
Далее, эта структура есть именно возвращаемое значение, или она передаётся в функцию как параметр? Обычно в Win API используется второй способ, поскольку память под данные должна выделить вызывающая программа, а не ОС. Borland же во всех подобных случаях объявляет подобные параметры как var (все заголовки к Win API функциям описаны всё в том же файле windows.pas). При этом компилятор сам передаст вызываемой функции указатель на струткуру, а не саму струткуру.

В результате в програме должно быть что-то типа

var varstring_tag:Tvarstring_tag; //обявление переменной
....

WinAPIFunc ( Param1,Param2,varstring_tag); //если структура в описании функции указана как var,
//то просто указываем имя нашей переменной
....

И вообще, при программировании через Win API изучение файла windows.pas очень полезно.
...
Рейтинг: 0 / 0
как по ссылке (Pointer) вытянуть данные
    #32372627
Дмитрий Мыльников
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Да, собственно по работе с указателями.

Описание структруы данных и типа - указателя на неё

type
TMyStruc = record //собственно структура
V1:integer;
V2:double;
V3:word;
V4:dword;
end;
PMyStruc = ^TMyStruc; //тип-указаетль

var
Struc1:TMyStruc; //это обычная переменная, под неё выделяется память размером SizeOf(TMyStruc)
Struc2:PMyStruc; //это переменная - указатель на струткуру, под неё выделяется 4 байта

....
WinAPIFunction ( @Struc1 ); //вызов функции, которой нужно передать указаетль на структуру
//обращение к данным обычным способом

New(Struc2); //!!! выделение памяти под структуру
try
Struc2^.V1:=0; //запись данных, после имени переменной ставим ^

WinAPIFunction( Struc2 );

...:=Struc2^.V2; //считывание данных

finally
Dispose(Struc2); //освобождение памяти после завершения работы со структурой
end;

если указатель на структуру передаётся как результат вызываемой функции, то можно использовать только второй вариант, поскольку при попытке написать что-то типа
@Struc1 := WinAPIFunc;
компилятор вас пошлёт, поскольку он такие вещи делать не умеет. Зато второй варинат
Struc2:= WinAPIFunc;
сработает как положено.
...
Рейтинг: 0 / 0
3 сообщений из 3, страница 1 из 1
Форумы / Delphi [игнор отключен] [закрыт для гостей] / как по ссылке (Pointer) вытянуть данные
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]