[C#] De lengte van structs bepalen

Pagina: 1
Acties:

  • robinvd
  • Registratie: November 2002
  • Laatst online: 07-06 12:49
In VB heb je hier de functie Len voor... maar wat is dat in C#.

dit is mijn struct:

public struct DRIEHOEK
{
public VERTEX v1,v2,v3;

public DRIEHOEK(VERTEX v1,VERTEX v2,VERTEX v3)
{
this.v1=v1;
this.v2=v2;
this.v3=v3;
}
}

Hoe bepaal ik nu hier de lengte van... ik heb alles al nagezocht enzo maar ik kan et echt niet vinden.....

  • CyberSnooP
  • Registratie: Augustus 2000
  • Laatst online: 31-03 16:47

CyberSnooP

^^^^ schrijft --->

In C(++) was daar de speciale operator sizeof voor. Een snelle blik in de MSDN leerde mij dat er ook nog een SizeOf Method is die volgens mij bereikt wat jij wilt.

|_____vakje______|


  • robinvd
  • Registratie: November 2002
  • Laatst online: 07-06 12:49
Dat dacht ik ook al... maar dat werkt niet in C# bij een struct :(

  • whoami
  • Registratie: December 2000
  • Laatst online: 08:53
SizeOf is 'unsafe' in C#, dwz dat die code niet door de CLR gemanaged wordt.

Als je toch sizeof wilt gebruiken, zul je dat dus in een blok moeten doen dat je als unsafe definieert:
code:
1
2
3
4
unsafe
{
   SizeOf (struct);
}

https://fgheysels.github.io/


  • robinvd
  • Registratie: November 2002
  • Laatst online: 07-06 12:49
C:\Documents and Settings\Robin\Mijn documenten\Visual Studio Projects\DirectX\Form1.cs(157): 'DirectX.Form1.dh' denotes a 'field' where a 'class' was expected

Deze foutmelding geeft hij dan...

Verwijderd

RvD2002 schreef op 17 November 2002 @ 12:23:
C:\Documents and Settings\Robin\Mijn documenten\Visual Studio Projects\DirectX\Form1.cs(157): 'DirectX.Form1.dh' denotes a 'field' where a 'class' was expected

Deze foutmelding geeft hij dan...
Het is sizeof, en niet SizeOf.

  • robinvd
  • Registratie: November 2002
  • Laatst online: 07-06 12:49
tja... die bestaat niet
C:\Documents and Settings\Robin\Mijn documenten\Visual Studio Projects\DirectX\Form1.cs(149): The name 'SizeOf' does not exist in the class or namespace 'DirectX.Form1'
en bij sizeof geeft hij bovenstaande melding (topic hierboven)

Verwijderd

RvD2002 schreef op 17 November 2002 @ 12:28:
tja... die bestaat niet
C:\Documents and Settings\Robin\Mijn documenten\Visual Studio Projects\DirectX\Form1.cs(149): The name 'SizeOf' does not exist in the class or namespace 'DirectX.Form1'
en bij sizeof geeft hij bovenstaande melding (topic hierboven)
C#:
1
2
3
MyStruct blah;
sizeof(blah); // Fout.
sizeof(MyStruct); // Zo zou het dacht ik moeten werken :)


Niet getest :)

  • robinvd
  • Registratie: November 2002
  • Laatst online: 07-06 12:49
kijk... doe ik dit:
unsafe
{
dh_vb=D3DDevice.CreateVertexBuffer(sizeof(DRIEHOEK),0,(int)FVF,CONST_D3DPOOL.D3DPOOL_DEFAULT);
}

werktet niet:

C:\Documents and Settings\Robin\Mijn documenten\Visual Studio Projects\DirectX\Form1.cs(149): Unsafe code may only appear if compiling with /unsafe

Verwijderd

RvD2002 schreef op 17 November 2002 @ 12:36:
kijk... doe ik dit:
unsafe
{
dh_vb=D3DDevice.CreateVertexBuffer(sizeof(DRIEHOEK),0,(int)FVF,CONST_D3DPOOL.D3DPOOL_DEFAULT);
}

werktet niet:

C:\Documents and Settings\Robin\Mijn documenten\Visual Studio Projects\DirectX\Form1.cs(149): Unsafe code may only appear if compiling with /unsafe
Nou dan! ;) Als je bij de opties kijkt van het project waar je unsafe code gebruikt, kun je een optie 'allow unsafe blocks' oid aanvinken.. Dat zul je moeten doen :)

  • robinvd
  • Registratie: November 2002
  • Laatst online: 07-06 12:49
YEAH!!!! HIJ DOETET.... eindelijk... Thnx man

  • CyberSnooP
  • Registratie: Augustus 2000
  • Laatst online: 31-03 16:47

CyberSnooP

^^^^ schrijft --->

Mag ik hieruit concluderen dat het praktisch onmogelijk is safe code te schrijven in C#?

|_____vakje______|


  • whoami
  • Registratie: December 2000
  • Laatst online: 08:53
Ik mag hieruit concluderen dat RvD2002 eens mag leren om de helpfiles goed te gebruiken en de P&W FAQ en Quickstart eens mag lezen.

Welkom in P&W (FAQ-15/10/2002)
Welkom in P&W -> Quickstart (update 2/10/2002)

https://fgheysels.github.io/


Verwijderd

CyberSnooP schreef op 17 November 2002 @ 12:51:
Mag ik hieruit concluderen dat het praktisch onmogelijk is safe code te schrijven in C#?
Uhm ... nee ... hoezo? Het is juist heel goed mogelijk safe code te schrijven.

Ik zie ook niet echt veel situaties in waar je zoiets als sizeof wil gebruiken EN safe code wil maken. sizeof is namelijk iets potentieel platform-afhankelijks, wat dus per definitie niet safe is.

  • CyberSnooP
  • Registratie: Augustus 2000
  • Laatst online: 31-03 16:47

CyberSnooP

^^^^ schrijft --->

Verwijderd schreef op 18 november 2002 @ 02:35:
Ik zie ook niet echt veel situaties in waar je zoiets als sizeof wil gebruiken EN safe code wil maken. sizeof is namelijk iets potentieel platform-afhankelijks, wat dus per definitie niet safe is.
Zodra je externe calls wil doen, zoals hier naar DirectX, kom je veel situaties tegen waarin de size van een struct als parameter geschreven is. Uiteraard zijn er constructies te bedenken waarbij dat niet nodig is, maar dat betekend dus dat je geen gebruiik meer kunt maken van dit soort gangbare bibliotheken, en DirectX zelf herschrijven is ook niet altijd een optie.

Ik vond het dus opvallend dat je voor een relatief eenvoudige constructie al moet teruggrijpen naar, volgens C#, unsafe code.

|_____vakje______|


Verwijderd

Dat ligt niet aan C# maar aan de structuur van .Net. Ik geen enkele .Net taal zal dit safe code zijn.

Verder is 'unsafe' code niet erg, alleen behoedt .Net je niet voor het maken van bepaalde fouten. Zie ook http://www.codeproject.com/csharp/unsafe_prog.asp

Edit:
De term 'unsafe' slaat dus op alles wat met memory management te maken heeft. sizeof () is daar dus onderdeel van, net zoals pointers e.d.
Pagina: 1