PureBasic - форум

Информация о пользователе

Привет, Гость! Войдите или зарегистрируйтесь.


Вы здесь » PureBasic - форум » Вопросы по PureBasic » Как извлеч строку?


Как извлеч строку?

Сообщений 1 страница 3 из 3

1

typedef struct _DEV_BROADCAST_DEVICEINTERFACE {
  DWORD dbcc_size;
  DWORD dbcc_devicetype;
  DWORD dbcc_reserved;
  GUID  dbcc_classguid;
  TCHAR dbcc_name[1];
} DEV_BROADCAST_DEVICEINTERFACE, *PDEV_BROADCAST_DEVICEINTERFACE;

Как извлеч строку dbcc_name[1]?

Код:
Protected *DevBrdDevInter.DEV_BROADCAST_DEVICEINTERFACE

AddMess("ClassGUID="+GUIDtoStr(*DevBrdDevInter\dbcc_classguid)) ;  Ok

AddMess("DevName="+*DevBrdDevInter\dbcc_name) ; Fail
AddMess("DevName="+PeekS(@*DevBrdDevInter\dbcc_name)) ;Fail
???

0

2

TCHAR dbcc_name[1];

Тогда это поле структуры под один символ. В PB будет выглядеть так.

Код:
dbcc_name.c[1]

или так.

Код:
dbcc_name.s{1}

0

3

В описании сказано так

dbcc_size

    The size of this structure, in bytes. This is the size of the members plus the actual length of the dbcc_name string (the null character is accounted for by the declaration of dbcc_name as a one-character array.)

...

dbcc_name

    A null-terminated string that specifies the name of the device.

Я понял так.
В свежеинициированной структуре - строка пустая и состоит из одного символа chr(0) - конец строки
В заполненной структуре - это поле не пустое и имеет соответствующую длину.
вроде должно просто читаться как строка
AddMess("DevName="+*DevBrdDevInter\dbcc_name)
но в Рантайм выпадает на ошибку.

P.S.
сработало так

AddMess("DevName="+PeekS(*DevBrdDevInter+3*4+16))

но чувствую что это некрасиво и может быть записано в лучщем виде

Отредактировано SadStar (13.07.2015 01:45:25)

0


Вы здесь » PureBasic - форум » Вопросы по PureBasic » Как извлеч строку?