Seite 1 von 1

Strukture zu groß

Verfasst: 02.12.2012 13:23
von Nero
Hiho,

ich habe da mal wieder ein kleines problemchen und zwar habe ich eine C++ strukture nach PB übersetzt nur leider ist sie zu groß :?

Hier mal die C++ struct

Code: Alles auswählen

typedef struct D3D11_SIGNATURE_PARAMETER_DESC {
  LPCSTR                      SemanticName;
  UINT                        SemanticIndex;
  UINT                        Register;
  D3D_NAME                    SystemValueType;
  D3D_REGISTER_COMPONENT_TYPE ComponentType;
  BYTE                        Mask;
  BYTE                        ReadWriteMask;
  UINT                        Stream;
  D3D_MIN_PRECISION           MinPrecision;
} D3D11_SIGNATURE_PARAMETER_DESC;
und hier die selbe in PB

Code: Alles auswählen

Structure D3D11_SIGNATURE_PARAMETER_DESC 
  *SemanticName.i
  SemanticIndex.l
  Register.l
  SystemValueType.l
  ComponentType.l
  Mask.b
  ReadWriteMask.b
  Stream.l
  MinPrecision.l
EndStructure
In C++ sind es 28Bytes in 32bit und 32 in 64bit ind PB 34 bytes
also muss ich irgendwo einen fehler gemacht haben nur stehe grad echt aufm schlauch.

D3D_NAME, D3D_REGISTER_COMPONENT_TYPE & D3D_MIN_PRECISION sind typedef enum {}
http://msdn.microsoft.com/en-us/library ... 85%29.aspx

Jemand ne idee was ich falsch gemacht habe?

Re: Strukture zu groß

Verfasst: 02.12.2012 15:04
von Sicro
Ich kann dir leider nicht direkt helfen, weil ich keine Kenntnisse in der Sprache C++ habe.
In C++ müsste es aber doch auch einen OffsetOf-Befehl geben, wie bei PureBasic. So könntest du die
Werte zwischen C++ und PureBasic vergleichen und die Variable mit der falschen Typzuweisung herausfinden.

Re: Strukture zu groß

Verfasst: 02.12.2012 15:50
von Nero
Ah danke für die info genau was ich brauchte <)

Verdammtes padding :bluescreen:

Re: Strukture zu groß

Verfasst: 02.12.2012 17:45
von STARGÅTE
Wäre nett, wenn du dann noch die Lösung postest Nero, damit andere es gleich haben.

Re: Strukture zu groß

Verfasst: 02.12.2012 19:58
von Nero
Zu groß war sie weil

Code: Alles auswählen

D3D_MIN_PRECISION           MinPrecision;
in der D3DShader.h überhaupt nicht definiert ist :? warum es dann in der MSDN steht ka.
vieleicht hab ich auch ne ältere version muß das später mal abchecken.

Dann hatte ich nen padding fehler so sollte es richtig sein

Code: Alles auswählen

;- D3D11_SIGNATURE_PARAMETER_DESC
Structure D3D11_SIGNATURE_PARAMETER_DESC 
  *SemanticName.i
  SemanticIndex.l
  Register.l
  SystemValueType.l
  ComponentType.l  
  Mask.b  
  ReadWriteMask.b
  padding.w                       ; padding
  Stream.l
EndStructure
Falls wer noch mehr der DX11 Structuren/Konstanten sucht der muß sich nur die SimpleDX11 header anschauen
da sind alle drinn (ok nur die ich bisher brauchte :lol:)

EDIT:
Ahso als C++ code zum abchecken hab ich mir einfach mit VC++ auf die schnelle ne kleine static lib
erstellt die ich importiert hab und dann per Debug verglichen
Nicht wirklich elegant und etwas unpraktisch aber hat funktioniert :lol:
#include <stdio.h>
#include <stddef.h>
#include <Windows.h>
#include <dxgi.h>
#include <d3dcommon.h>
#include <d3d11.h>
#include <d3dx11.h>
#include <d3dx10math.h>
#include <d3dcompiler.h>

#define ext extern "C"

#define member_sizeof(T,F) sizeof(((T *)0)->F)

ext int __stdcall struct_test()
{
//return member_sizeof(D3D11_SIGNATURE_PARAMETER_DESC, Mask);
//return offsetof(D3D11_SIGNATURE_PARAMETER_DESC, Stream);
return sizeof(D3D11_SIGNATURE_PARAMETER_DESC);
}

Re: Strukture zu groß

Verfasst: 02.12.2012 20:03
von ts-soft

Code: Alles auswählen

*SemanticName.i
Das ".i" ist aber auch verkehrt, entweder Pointer (evtl. strukturiert) oder Integer, beides geht nicht.
Wird übrigens, lt. Aussage von Fred, ab der nächsten PB Version auch angemeckert, zur Zeit wird es ignoriert.

Gruß
Thomas

Re: Strukture zu groß

Verfasst: 02.12.2012 20:13
von Nero
ts-soft hat geschrieben:

Code: Alles auswählen

*SemanticName.i
Das ".i" ist aber auch verkehrt, entweder Pointer (evtl. strukturiert) oder Integer, beides geht nicht.
Wird übrigens, lt. Aussage von Fred, ab der nächsten PB Version auch angemeckert, zur Zeit wird es ignoriert.

Gruß
Thomas
Hm danke werde sie rausnehmen.
Weis garnicht mehr warum das hat sich irgendwann so bei mir eingebürgert den pointernt immer das .i anzuhängen
Hab da auch ehrlich gasagt nie drüber nachgedacht :oops:

Re: Strukture zu groß

Verfasst: 02.12.2012 20:25
von ts-soft
Du bist nicht der einzige, der darüber nicht nachgedacht hat. In einer früheren Version von PB
wurde eine Typangabe bei pointern in strukturen sogar verlangt :shock:

.i ist auch die harmloseste Variante, .s denke ich mal das schlimmste was man machen kann :wink:

Bis jetzt wird auf jedenfall die Typangabe ignoriert bei Pointern, aber nicht mehr lange, deshalb mein
Hinweis. Macht wohl jeder dritte oder vierte verkehrt.

Nicht zu verwechseln mit struktureangabe, also *mypointer.integer ist korrekt"