Ich verwende C# .NET Compact Framework 2.0, für bestimmte Bedingungen versuche ich, mein Strukturobjekt zu serialisieren.Das Marshalling-Objekt gibt einen anderen Wert zurück
Da .NET 2.0 CF nicht über diese Funktion verfügt, bin ich Marshalling-Objekt.
ich kann in der Lage, es zu tun, aber das Problem ist, nach Unmarshalling des Objekts,
Ich erhalte unterschiedlichen Objektwert.
public struct Student
{
public ushort Marks;
public uint Age;
}
//// In Methode:
Codeblöcke wurden weiter unten
Student s;
s.Marks = 78;
s.Age = 20;
// Marshaling object 's', its success.
char[] ar = SerializeObject(s);
// Unmarshaling object back , its giving different value. For detail, pls. find the attached image.
Student s2 = DeserializeObject(ar, s);
private char[] SerializeObject(Student objMS)
{
string objStr = string.Empty;
char[] objArr = new char[2048];
int size = Marshal.SizeOf(objMS);
byte[] byteData = new byte[size];
IntPtr ptr = Marshal.AllocHGlobal(size);
Marshal.StructureToPtr(objMS, ptr, false);
Marshal.Copy(ptr, byteData, 0, size);
Marshal.FreeHGlobal(ptr);
objStr = Convert.ToBase64String(byteData);
objArr = objStr.ToCharArray();
return objArr;
}
private Student DeserializeObject(char[] objArr, Student metaStr)
{
Student objMS;
int size = Marshal.SizeOf(metaStr);
IntPtr ptr = Marshal.AllocHGlobal(size);
Marshal.Copy(objArr, 0, ptr, size);
objMS = (Student)Marshal.PtrToStructure(ptr, metaStr.GetType());
Marshal.FreeHGlobal(ptr);
return objMS;
}
Es wird großartig sein kann, wenn jemand die falsche vorschlagen, was ich hier tue .
Danke Kentonbmax für Ihre schnelle Antwort! Ja, in Byte [] Array funktioniert es, aber ich muss es an die C++ - Methode übergeben, die char [] als Parameter akzeptiert. Das ist der Grund, warum ich versuchte, es in char [] Array zu konvertieren. Ich bin mir nicht sicher, was ich hier vermisse. –
Ist der Fluss, serialisieren, übergeben an COM, Get von COM, deserialize? – Kentonbmax
Bitte beachten Sie mein aktuelles Beispiel. – Kentonbmax