से मैं RNGCryptoServiceProvider->() PHP से COM परत के माध्यम से कॉल करने के लिए प्रयास कर रहा GetBytes कर रहा हूँ। मैं इसे कक्षा से कनेक्ट करने के लिए प्राप्त कर सकता हूं, लेकिन हर बार जब मैं विधि को कॉल करता हूं, तो मुझे दो त्रुटियों में से एक मिलता है (पैरामीटर से संबंधित)। मुझे लगता है कि इस तथ्य के कारण कुछ है कि GetBytes संदर्भ द्वारा एक निश्चित आकार बाइट सरणी लेता है। चूंकि पीएचपी निश्चित आकार तार का समर्थन नहीं करता, कि जहां यह दिलचस्प हो जाता है: 1कॉम के DotNet कक्षा से RNGCrypto कॉलिंग पीएचपी
त्रुटि:
$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# interface to the method है:
public override void GetBytes(
byte[] data
)
धन्यवाद
यह हो सकता है नहीं समाधान आप के लिए देख रहे हैं, लेकिन क्यों एक सरल खिड़कियों सेवा प्राप्त करता है कि जो कुछ भी आप PHP से भेजना चाहते हैं और फिर बस इनकोडिंग मूल्य वापस नहीं बनाने (सी # में सभी प्रसंस्करण करते हैं)? –
@ गुस्तावो रूबियो यह लाइब्रेरी कोड के लिए है। असल में एक पोर्टेबल पीआरएनजी का हिस्सा जो सभी प्लेटफॉर्म पर मजबूत यादृच्छिकता उत्पन्न करने का प्रयास करता है। तो सिस्टम कॉल के अलावा अन्य सेवाएं या कुछ भी वास्तव में स्वीकार्य नहीं है (जो मैं कर रहा हूं)। अच्छा विचार हालांकि ... – ircmaxell