Marshal.StructureToPtr schlägt mit Bool und Array fester Größe fehl?

8

Wenn ich diese Struktur mit StructureToPtr marshale und sie dann wieder mit PtrToStructure entpacke, hat mein erster Knoten y = {1,2}, während mein zweiter Knoten y = {1,0} hat.

Ich habe keine Ahnung warum, vielleicht ist meine Struktur irgendwie schlecht? Das Entfernen der bool von der Struktur macht es funktioniert.

%Vor%     
junichiro 05.02.2012, 19:09
quelle

2 Antworten

9

Das geht tatsächlich schief. Es ist der Aufruf von StructureToPtr (), der nicht genügend Byte kopieren kann. Sie können dies sehen, indem Sie Debug + Windows + Memory + Memory1 verwenden und "ptr" in das Adressfeld schreiben. Verwenden des Operators sizeof isn ' t korrigieren , aber nicht die Ursache des Problems. Nur das erste Element des Arrays wird kopiert, unabhängig von der Array-Länge. Nicht sicher, was dieses Problem verursacht, verwende ich nie behoben in pinvoke. Ich kann nur den traditionellen Pinvoke-Weg empfehlen, der gut funktioniert:

%Vor%

Sie können eine Nachricht an connect.microsoft.com senden, wenn Sie dies den CLR-Interop-Mastern zur Kenntnis bringen möchten.

    
Hans Passant 05.02.2012, 19:53
quelle
0

Sie sollten auch die Struktur oder Klasse packen, bevor Sie sie verwenden. Das funktioniert für mich, fast so gut wie memcpy

%Vor%     
user2357319 07.05.2013 07:24
quelle

Tags und Links