Übergabe der Struktur von C # nach C ++

8

Ich habe die folgende Struktur in C ++

%Vor%

Und das ist meine Funktionsdeklaration in C ++:

%Vor%

Dies ist mein entsprechender C # -Code:

%Vor%

Wenn ich jedoch FaceGenerationDummy mit diesem Test anrufe:

%Vor%

Ich habe festgestellt, dass KdTrees in C ++ 0 ist anstelle von 1 als übergeben.

Was habe ich falsch gemacht?

Edit: Ich benutze Visual Studio 2008 auf einem Windows 7 32 Bit, nicht sicher, ob das hilft.

Edit 2: Beide sizeof(SnapRoundingOption) gibt die gleiche Zahl zurück, 16.

    
Graviton 08.03.2011, 08:40
quelle

2 Antworten

12

Das Problem besteht darin, wie Sie die Felder bool anordnen. Dies sind einzelne Bytes in C ++ und müssen daher gemarshallt werden:

%Vor%

Finden Sie dies auf der C ++ Seite:

%Vor%

Ich habe die Packeinstellungen entfernt, damit die Strukturen eine natürliche Ausrichtung zur Plattform haben.

Sie sollten auch sicherstellen, dass Ihre Aufrufkonventionen übereinstimmen. So wie es aussieht, sieht der C ++ Code cdecl und der C # Code stdcall aus. Zum Beispiel

%Vor%

würde die beiden Seiten der Schnittstelle ausrichten.

    
David Heffernan 08.03.2011, 09:16
quelle
3

bool ist NICHT blittierbar ! Sein Standard-Marshalling ist das Win32 BOOL (welches 4 Bytes ist), nicht bool (welches 1 Byte ist)!

    
Mehrdad 08.03.2011 09:17
quelle

Tags und Links