Вызов RNGCrypto из COM DOTNET Класс из PHP

Я пытаюсь вызвать RNGCryptoServiceProvider-> GetBytes () из PHP через COM слой. Я могу заставить его подключиться к классу, но каждый раз, когда я вызываю метод, я получаю одну из двух ошибок (связанных с параметром). Я думаю, это связано с тем, что GetBytes принимает байт фиксированного размера массив по ссылке. Поскольку PHP не поддерживает строки фиксированного размера, вот что интересно:

Ошибка 1:

$util    = new \DOTNET(
    'mscorlib',
    'System.Security.Cryptography.RNGCryptoServiceProvider'
);
$data = new \Variant(str_repeat(chr(46), $size), VT_UI1 | VT_ARRAY);
$util->GetBytes($data);

Ошибка [0x80070057] Параметр неверен

Который выдается -> GetBytes () строка.

Если я не использую вариант, а просто использую простую строку, я все равно получаю ту же ошибку.

Однако, если я передаю такой массив:

$data = array('');
$util->GetBytes($data);

Параметр 0: Несоответствие типа.

Поэтому я считаю, что подход вариант / строка является правильным (поскольку он проходит проверку типа параметра). Но я просто не могу понять, как заставить его работать.

C # интерфейс к методу :

public override void GetBytes(
    byte[] data
)

Спасибо

6
задан ircmaxell 27 June 2011 в 19:08
поделиться