spsbeginnerin
Level-1
- Beiträge
- 7
- Reaktionspunkte
- 0
-> Hier kostenlos registrieren
Hallo ich hatte das schonmal gestellt die Frage, aber weil noch niemand geantwortet hat, dachte ich, ich frag nochmal präziser und einfacher.
Ich möchte ein Objekt einer Klasse senden, welches einfache Attribute hat (short, bool etc.) und ein Array bestehend aus einer anderen Klasse. Also
[StructLayout(LayoutKind.Sequential, Pack = 0)]
class Class1{
short id;
short type;
[MarshalAs(UnmanagedType.I1)]
bool exist;
ComplexClass [] complex_array;
}
[StructLayout(LayoutKind.Sequential, Pack = 0)]
ComplexClass{
[MarshalAs(UnmanagedType.I1)]
bool b1;
short s1;
Position p1;
}
Wenn ich jetzt ein Objekt erstelle:
Class1 c1 = new Class1();
und das mit WriteAny(path, c1) an die sPS sende, dann funktioniert es leider nicht. id, type und exist wird richtig übertragen, aber im array stehen absurde werde drin. zb der erste Wert b1, wo ein bool stehen müsste steht: <Der Wert des Ausdrucks kann nicht gelesen werden.> und danach eine viel zu große zahl im short s1.
Funktioniert das einfach nicht ein Objekt mit writeany zu senden welches ein array von structs/class enthält? (bzw könnte es mit einem struct funktionieren?)
wie muss das mit dem MarshallAs angewendet werden? Muss da auch vor dem Attribut complex_array in class1 hingeschrieben werden wie es gemarshalled werden soll(müsste ja eigentlich reichen das ist der Definition der Klasse zu machen..
Auf der Beckhoff seite steht:
eise keine feste Länge haben, muss mit dem Property SizeConst die Grösse des Arrays bzw. des Strings festgelegt werden. Das Marshallen von Mehrdimensionale Arrays oder Arrays von Strukturen ist mit dem Marhaler des .NET Frameworks 1.1 nicht möglich. Mehrdimensionale Arrays müssten auf eindimensionale Arrays abgebildet werden. Arrays von Strukturen müssten in der .NET Struktur aufgelöst werden.
ich nutze ja ein höheres net-framework, aber vielleicht haben sie es einfach noch nicht behoben? weiß jemand irgendetwas dazu? Oder hat eine Alternative Lösung? Alle Attribute einzeln senden (funktioniert, sowohl für attribute als für das array) dauert halt ganz schön lange...
Ich möchte ein Objekt einer Klasse senden, welches einfache Attribute hat (short, bool etc.) und ein Array bestehend aus einer anderen Klasse. Also
[StructLayout(LayoutKind.Sequential, Pack = 0)]
class Class1{
short id;
short type;
[MarshalAs(UnmanagedType.I1)]
bool exist;
ComplexClass [] complex_array;
}
[StructLayout(LayoutKind.Sequential, Pack = 0)]
ComplexClass{
[MarshalAs(UnmanagedType.I1)]
bool b1;
short s1;
Position p1;
}
Wenn ich jetzt ein Objekt erstelle:
Class1 c1 = new Class1();
und das mit WriteAny(path, c1) an die sPS sende, dann funktioniert es leider nicht. id, type und exist wird richtig übertragen, aber im array stehen absurde werde drin. zb der erste Wert b1, wo ein bool stehen müsste steht: <Der Wert des Ausdrucks kann nicht gelesen werden.> und danach eine viel zu große zahl im short s1.
Funktioniert das einfach nicht ein Objekt mit writeany zu senden welches ein array von structs/class enthält? (bzw könnte es mit einem struct funktionieren?)
wie muss das mit dem MarshallAs angewendet werden? Muss da auch vor dem Attribut complex_array in class1 hingeschrieben werden wie es gemarshalled werden soll(müsste ja eigentlich reichen das ist der Definition der Klasse zu machen..
Auf der Beckhoff seite steht:
eise keine feste Länge haben, muss mit dem Property SizeConst die Grösse des Arrays bzw. des Strings festgelegt werden. Das Marshallen von Mehrdimensionale Arrays oder Arrays von Strukturen ist mit dem Marhaler des .NET Frameworks 1.1 nicht möglich. Mehrdimensionale Arrays müssten auf eindimensionale Arrays abgebildet werden. Arrays von Strukturen müssten in der .NET Struktur aufgelöst werden.
ich nutze ja ein höheres net-framework, aber vielleicht haben sie es einfach noch nicht behoben? weiß jemand irgendetwas dazu? Oder hat eine Alternative Lösung? Alle Attribute einzeln senden (funktioniert, sowohl für attribute als für das array) dauert halt ganz schön lange...