Dies ist mein 3. Thread bezüglich eines Blowfish-Problems in C#. Obwohl ich Blowfish nicht in meiner Anwendung implementiert haben kann, entschied ich mich, es als externe C++ - DLL zu verwenden. Bitte beachten Sie, dass ich Blowfish.NET und alle anderen ausprobiert habe, das Problem ist, dass ich Code von C++ in C# übersetze und der C# -Code genau dasselbe tun muss wie der C++ Code.Problem beim Aufruf einer C++ - DLL-Funktion von C#
Bisher:
Beachten Sie die exportierten Funktionen in dem Ende des Codes sind
C# -Code (Definition)
[DllImport("TestDLL.dll", EntryPoint = "Initkey" ,ExactSpelling = true , CallingConvention = CallingConvention.Cdecl)]
public static unsafe extern void Initkey(byte[] key);
[DllImport("TestDLL.dll", EntryPoint = "encode", ExactSpelling = true, CallingConvention = CallingConvention.Cdecl)]
public static unsafe extern void encode(UInt32 *stream);
C# -Code (Funktionsaufruf)
-initialize blowfish Schlüssel
UInt32[] keyarray = new UInt32[2];
//some code
Extern.Initkey(Misc.ConvertFromUInt32Array(keyarray));
//
//
//Helper function used to convert a UInt32 array into Byte array.
public static byte[] ConvertFromUInt32Array(UInt32[] array)
{
List<byte> results = new List<byte>();
foreach (UInt32 value in array)
{
byte[] converted = BitConverter.GetBytes(value);
results.AddRange(converted);
}
return results.ToArray();
}
-Encode die Daten.
UInt32[] keyarray2 = new UInt32[2];
//some code
unsafe
{
fixed (UInt32* LPBYTE = keyarray2)
{
Extern.encode(LPBYTE);
}
}
Nach keyarray2 durch die Encode Funktion überschrieben wird, überprüfe ich die Werte in den C++ Code, indem sie zu entschlüsseln, ob alles in Ordnung ist, zu machen.
Nun, es ist nicht in Ordnung. Das ist mein Problem, deshalb bitte ich Sie um Ihre Hilfe. Die Werte sind unterschiedlich, wenn ich sie entschlüssle, aber wenn ich sie verschlüssle und sie in der C++ - Quelle entziffere, sind sie gleich. Der C++ - Code ist absolut derselbe, außer dass es keine DLL gibt, da der Code in C++ ist.
Könnte sein, wegen der Initialize-Funktion.Ich hatte vor ein paar Monaten gelesen, dass Arrays in C++ als Pointer übergeben werden. Ich glaube es nicht, aber selbst so - könnte das das Problem sein?
Ich kann keinen Hinweis finden. Ich habe mein Leben mit diesem Kugelfisch in C# verschwendet. Zumindest sollte diese Lösung funktionieren, aber es nicht - Warum?
Sie haben Ihre Frau verschwendet? Etwas übertrieben IMO .. – Blorgbeard