Я пытаюсь вызвать 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
)
Спасибо