Ich versuche, RNGCryptoServiceProvider->GetBytes() von PHP über die COM-Schicht aufzurufen. Es gelingt mir, eine Verbindung zur Klasse herzustellen, aber jedes Mal, wenn ich die Methode aufrufe, erhalte ich einen von zwei Fehlern (in Bezug auf den Parameter). Ich denke, es hat etwas mit der Tatsache zu tun, dass GetBytes ein Byte-Array mit fester Größe als Referenz nimmt. Da PHP keine Strings mit fester Größe unterstützt, wird es hier interessant:
Fehler 1:
$util = new \DOTNET(
'mscorlib',
'System.Security.Cryptography.RNGCryptoServiceProvider'
);
$data = new \Variant(str_repeat(chr(46), $size), VT_UI1 | VT_ARRAY);
$util->GetBytes($data);
Fehler [0x80070057] Der Parameter ist falsch
Das wird durch den ->GetBytes()
Linie.
Wenn ich keine Variante, sondern nur eine einfache Zeichenfolge verwende, erhalte ich immer noch denselben Fehler.
Wenn ich jedoch ein Array wie folgt eingebe:
$data = array('');
$util->GetBytes($data);
Parameter 0: Fehlende Übereinstimmung des Typs.
Daher denke ich, dass die Variante/Zeichenkette der richtige Ansatz ist (da sie die Überprüfung des Parametertyps besteht). Aber ich kann einfach nicht herausfinden, wie man es zum Laufen bringt.
El C#-Schnittstelle zur Methode ist:
public override void GetBytes(
byte[] data
)
Gracias