Конвертирование REG_BINARY

Конвертирование REG_BINARY

Добрый день.
Хотел задать следующий вопрос:
По средствам COM (RegRead()) получаю данные из реестра Windows, но проблема в том, что данные хранятся в REG_BINARY.
var_dump полученного значения выдаёт object(variant)#3 (0) { }
Что с сием делать что бы переделать в стринг или hex (потому что мне кажется что REG_BINARY есть 16 строка) ума не приложу -(
Подскажите?
REG_SZ возвращается так, как нужно

-~{}~ 10.02.08 17:39:

Вариант это класс http://ru2.php.net/manual/ru/class.variant.php

$t = $r->RegRead('HKEY_LOCAL_MACHINE\..\..');
echo $t;

$v = new VARIANT(42);
echo $v;

Возвращает
Object id #2
42


----------
а var_dump($v) вернет так же object(variant)#3 (0) { }

Посему ничего не понимаю
 

Андрейка

Senior pomidor developer
bragovo
а в том самом REG_BINARY какое значение (из regeditа) ?
а var_dump $t $t->value variant_get_type($t) и прочего для строки и отсутствующего REG_BINARY мож показать?
 

FractalizeR

Новичок
Проблема в том, что при чтении REG_BINARY возвращаемое значение имеет тип не строковый, а VBArray. А PHP к нему плохо относится :)
 
Андрейка, к сожалению точно скопировать не могу =( Сервер вне доступа.
Но если по памяти, то ничего полезного
var_dump($t) - object(variant)#3 (0) { }
var_dump($t->value) - отсутствует
var_dump(variant_get_type($t)) - выдаёт некий тип объекта, числовое значение. И какое бы значение не читал этот тип всегда одинаковый.

FractalizeR, на данный момент задача уже снимается. Уже просто для справки интересно как с таким типом работать? Гугл ничего полезного мне не подсказал.
Может кто поделится информацией?
 

FractalizeR

Новичок
Работать, как оказалось, крайне просто. Вот так:

PHP:
<?php
 $shell = new COM('WScript.Shell');
 $testval = $shell->regRead('HKEY_LOCAL_MACHINE\SOFTWARE\ASProtect\SpecData\901C2DEBDFFC33DE');
 foreach ($testval as $val) {
    echo $val;
 }
?>
 
млин =)))

FractalizeR, спасибо, при возможности попробую. А почему он тогда вардампом не отображается как массив, если это массив?
 

FractalizeR

Новичок
Это не массив. Это VARIANT, имеющий тип VT_ARRAY (variant_get_type дает это значение). Правда, не знаю, почему к нему нельзя обратиться через обычный синтаксис массивов PHP... Кроме того, settype некорректно работает на нем... Если его в массив преобразовывать, получается пустой массив.

Может быть, имеет смысл запостить это в багтрекер PHP? Хотя, конечно, это не имеет прямого отношения к PHP...
 
Сверху