[C++/CLI]DirectX EffectDescription als array definiëren.

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

  • BlackBurn
  • Registratie: Juni 2001
  • Laatst online: 09-09 06:46

BlackBurn

One Ring To Rule Them All

Topicstarter
Ik ben bezig met een audio applicatie en nu wil ik hier wat DirectX effecten aan toevoegen, echter zou dit volgens de voorbeelden erg simpel moeten zijn, zie hieronder:

C#:
1
2
3
4
EffectDescription[] effects = new EffectDescription[2];
effects[0].GuidEffectClass = DSoundHelper.StandardEchoGuid;
effects[1].GuidEffectClass = DSoundHelper.StandardChorusGuid;
buffer.SetEffects(effects);


Echter wil het ombouwen naar C++/CLI niet echt lukken wat ik ook probeer ik krijg verschillende foutmeldingen o.a a native array cannot contain this managed type, met de onderstaande code.

C++:
1
    EffectDescription ^objEffects = gcnew EffectDescription[2];


Iets doe ik fout met het declareren, maar ik krijg niet gevonden wat al zal het uiteindelijk wel weer heel simpel zijn, iemand die mijn een zetje in de goede richting kan geven?

If it is broken, fix it. If it ain't broken, make it better!


Acties:
  • 0 Henk 'm!

  • .oisyn
  • Registratie: September 2000
  • Laatst online: 12-09 15:22

.oisyn

Moderator Devschuur®

Demotivational Speaker

En het komt überhaupt niet in je op om gewoon even in de MSDN te kijken?

http://msdn2.microsoft.co...rary/ms177551(VS.80).aspx

Give a man a game and he'll have fun for a day. Teach a man to make games and he'll never have fun again.


Acties:
  • 0 Henk 'm!

  • BlackBurn
  • Registratie: Juni 2001
  • Laatst online: 09-09 06:46

BlackBurn

One Ring To Rule Them All

Topicstarter
.oisyn schreef op maandag 04 juni 2007 @ 11:53:
En het komt überhaupt niet in je op om gewoon even in de MSDN te kijken?

http://msdn2.microsoft.co...rary/ms177551(VS.80).aspx
Wel gekeken, daar komt ook de voorbeeld code vandaan, helaas de onderstaande code niet gevonden, maar met deze link moet het wel lukken! thanks.

If it is broken, fix it. If it ain't broken, make it better!


Acties:
  • 0 Henk 'm!

  • BlackBurn
  • Registratie: Juni 2001
  • Laatst online: 09-09 06:46

BlackBurn

One Ring To Rule Them All

Topicstarter
Dacht dat ik er wel uit zou komen, maar lukt toch niet helemaal, krijg nu nog een System.NullReferenceException.

Ik krijg hem op deze regel.

C++:
1
  objEffects[0]->GuidEffectClass = DSoundHelper::StandardEchoGuid;


Dit is de code zoals deze compleet is geworden.

C++:
1
2
3
4
  array<EffectDescription^, 1> ^objEffects;
  objEffects = gcnew array<EffectDescription^,1>(2);
  objEffects[0]->GuidEffectClass = DSoundHelper::StandardEchoGuid;
  objBuffer->SetEffects( (array<EffectDescription, 1>^) objEffects);


Iemand die een hint in de goede richting kan geven?

If it is broken, fix it. If it ain't broken, make it better!


Acties:
  • 0 Henk 'm!

  • user109731
  • Registratie: Maart 2004
  • Niet online
Zou je de objecten in de array niet eerst initialiseren? Nu maak je volgens mij een array voor 2 EffectDescription objecten, maar je zegt niet dat er ook 2 aangemaakt moeten worden...

Er staat dus netjes twee keer null in, vandaar de exception (je probeert GuidEffectClass van een null object te wijzigen) :)

[ Voor 15% gewijzigd door user109731 op 05-06-2007 21:03 ]


Acties:
  • 0 Henk 'm!

  • BlackBurn
  • Registratie: Juni 2001
  • Laatst online: 09-09 06:46

BlackBurn

One Ring To Rule Them All

Topicstarter
JanDM schreef op dinsdag 05 juni 2007 @ 21:02:
Zou je de objecten in de array niet eerst initialiseren? Nu maak je volgens mij een array voor 2 EffectDescription objecten, maar je zegt niet dat er ook 2 aangemaakt moeten worden...

Er staat dus netjes twee keer null in, vandaar de exception (je probeert GuidEffectClass van een null object te wijzigen) :)
Kom ik inderdaad wel wat verder mee, was er vanuit gegegaan dat door dat ik deze klasse bij de declaratie al aangaf wel automatisch aangemaakt zouden worden, beetje misleid denk ik door de eenvoud van de C# code.

Nu gaat het op de laatste regel nog wel mis met een InvalidCastException, nog even uitzoeken waar dat aan ligt.

C++:
1
2
3
4
5
  array<EffectDescription^, 1> ^objEffects;
  objEffects = gcnew array<EffectDescription^,1>(1);
  objEffects[0] = gcnew EffectDescription();
  objEffects[0]->GuidEffectClass = DSoundHelper::StandardEchoGuid;
  objBuffer->SetEffects( (array<EffectDescription, 1>^) objEffects);


Het gaat nu dus mis op de laatste regel, maar dat is wel vaag hij zeg dat die het type value niet kan converteren naar een array..., maar dat is wel precies wat er gevraagd wordt 8)7 Waarom zijn hier geen C++ examples van te vinden :P

[ Voor 26% gewijzigd door BlackBurn op 05-06-2007 21:31 ]

If it is broken, fix it. If it ain't broken, make it better!


Acties:
  • 0 Henk 'm!

  • .oisyn
  • Registratie: September 2000
  • Laatst online: 12-09 15:22

.oisyn

Moderator Devschuur®

Demotivational Speaker

Hmm, wat is EffectDescription, een ref class of een value class? Als het een ref class is moet je idd een array<EffectDescription^> gebruiken, maar aan de C# code te zien is het een value class (er wordt niets genew'd), en dan moet je een array<EffectDescription> gebruiken waarbij je elk element ook niet afzonderlijk hoeft te alloceren.

[ Voor 3% gewijzigd door .oisyn op 05-06-2007 22:24 ]

Give a man a game and he'll have fun for a day. Teach a man to make games and he'll never have fun again.


Acties:
  • 0 Henk 'm!

  • BlackBurn
  • Registratie: Juni 2001
  • Laatst online: 09-09 06:46

BlackBurn

One Ring To Rule Them All

Topicstarter
.oisyn schreef op dinsdag 05 juni 2007 @ 22:24:
Hmm, wat is EffectDescription, een ref class of een value class? Als het een ref class is moet je idd een array<EffectDescription^> gebruiken, maar aan de C# code te zien is het een value class (er wordt niets genew'd), en dan moet je een array<EffectDescription> gebruiken waarbij je elk element ook niet afzonderlijk hoeft te alloceren.
Damn'd zeg, dat was gewoon de oplossing, dat ik daar overheen heb gekeken :P
Ach het was in ieder geval erg leerzaam :)

De code zoals deze geworden is.

C++:
1
2
3
4
  array<EffectDescription, 1> ^objEffects;
  objEffects = gcnew array<EffectDescription,1>(1);
  objEffects[0].GuidEffectClass = DSoundHelper::StandardEchoGuid;
  objBuffer->SetEffects( (array<EffectDescription, 1>^) objEffects);

If it is broken, fix it. If it ain't broken, make it better!

Pagina: 1