Strukture zu groß

Fragen zu allen anderen Programmiersprachen.
Nero
Beiträge: 285
Registriert: 08.11.2004 01:50

Strukture zu groß

Beitrag 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?
Benutzeravatar
Sicro
Beiträge: 963
Registriert: 11.08.2005 19:08
Kontaktdaten:

Re: Strukture zu groß

Beitrag 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.
Bild
Warum OpenSource eine Lizenz haben sollte :: PB-CodeArchiv-Rebirth :: Pleasant-Dark (Syntax-Farbschema) :: RegEx-Engine (kompiliert RegExes zu NFA/DFA)
Manjaro Xfce x64 (Hauptsystem) :: Windows 10 Home (VirtualBox) :: Neueste PureBasic-Version
Nero
Beiträge: 285
Registriert: 08.11.2004 01:50

Re: Strukture zu groß

Beitrag von Nero »

Ah danke für die info genau was ich brauchte <)

Verdammtes padding :bluescreen:
Benutzeravatar
STARGÅTE
Kommando SG1
Beiträge: 7031
Registriert: 01.11.2005 13:34
Wohnort: Glienicke
Kontaktdaten:

Re: Strukture zu groß

Beitrag von STARGÅTE »

Wäre nett, wenn du dann noch die Lösung postest Nero, damit andere es gleich haben.
PB 6.01 ― Win 10, 21H2 ― Ryzen 9 3900X, 32 GB ― NVIDIA GeForce RTX 3080 ― Vivaldi 6.0 ― www.unionbytes.de
Aktuelles Projekt: Lizard - Skriptsprache für symbolische Berechnungen und mehr
Nero
Beiträge: 285
Registriert: 08.11.2004 01:50

Re: Strukture zu groß

Beitrag 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);
}
Zuletzt geändert von Nero am 02.12.2012 20:28, insgesamt 1-mal geändert.
Benutzeravatar
ts-soft
Beiträge: 22292
Registriert: 08.09.2004 00:57
Computerausstattung: Mainboard: MSI 970A-G43
CPU: AMD FX-6300 Six-Core Processor
GraKa: GeForce GTX 750 Ti, 2 GB
Memory: 16 GB DDR3-1600 - Dual Channel
Wohnort: Berlin

Re: Strukture zu groß

Beitrag 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
PureBasic 5.73 LTS | SpiderBasic 2.30 | Windows 10 Pro (x64) | Linux Mint 20.1 (x64)
Nutella hat nur sehr wenig Vitamine. Deswegen muss man davon relativ viel essen.
Bild
Nero
Beiträge: 285
Registriert: 08.11.2004 01:50

Re: Strukture zu groß

Beitrag 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:
Benutzeravatar
ts-soft
Beiträge: 22292
Registriert: 08.09.2004 00:57
Computerausstattung: Mainboard: MSI 970A-G43
CPU: AMD FX-6300 Six-Core Processor
GraKa: GeForce GTX 750 Ti, 2 GB
Memory: 16 GB DDR3-1600 - Dual Channel
Wohnort: Berlin

Re: Strukture zu groß

Beitrag 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"
PureBasic 5.73 LTS | SpiderBasic 2.30 | Windows 10 Pro (x64) | Linux Mint 20.1 (x64)
Nutella hat nur sehr wenig Vitamine. Deswegen muss man davon relativ viel essen.
Bild
Antworten