Ik ben bezig met een avondcursus HBO TI, nu zijn we net begonnen met C++(.net) en over het algemeen lukt het vrij aardig, echter loop ik nu een beetje vast.
Ik heb een klasse TuneGenerator, die heeft de volgende header file.
De constructor in de CPP file ziet er als volgt uit.
Vanuit een andere klasse wordt de waveFormat gedefinieerd, en wordt er een object aangemaakt van de TuneGenerator, waar de waveFormat aan meegegeven wordt. Nu zou naar mijn inziens waveFormat bekend moeten zijn binnen het aangemaakte object TuneGenerator, in de constructor, schrijft deze ook netjes naar de console de waarde "22050".
Echter nu wordt er vanuit mijn TuneBeheer een methode aangeroepen in de klasse TuneGenerator.
Echter tijdens het draaien klapt deze er hier uit met een "System.NullReferenceException" error. m.b.v. een breakpoint, kwam ik erachter dat het gebeurde op this->waveFormat.SamplesPerSecond.
Als ik tijdens het debuggen ook de waveFormat controleer, staat er ook idd achter SamplesPerSecond, "error: cannot obtain value".
Iemand die mij hier wat licht in de duisternis kan brengen, waardoor de waarde van de waveFormat niet netjes doorgegeven worden?
Ik heb een klasse TuneGenerator, die heeft de volgende header file.
C++:
1
2
3
4
5
6
7
8
9
10
11
12
| using namespace Microsoft::DirectX::DirectSound; using namespace System; //Nodig om Math te kunnen gebruiken. public ref class TuneGenerator{ public: TuneGenerator(WaveFormat waveFormat); //Constructor void geneerToon(); //Genereert een PiepToon void geneerDoom(); //Genereert een DoomToon array<unsigned char> ^getBuffer(); private: array <unsigned char> ^mixBuffer; //Array die de Buffer bevat. WaveFormat waveFormat; //Beschrijft de "wave file" |
De constructor in de CPP file ziet er als volgt uit.
C++:
1
2
3
4
5
6
7
8
9
10
11
| TuneGenerator::TuneGenerator(WaveFormat wFormat){ //Constructor //Stel waveformat in, om de tonen juist te kunnen genereren. waveFormat = wFormat; Console::WriteLine("Samples per second: "+waveFormat.SamplesPerSecond); //Debug //waveFormat.SamplesPerSecond=22050; //Vul de array mixBuffer = gcnew array <unsigned char> (waveFormat.SamplesPerSecond); }; |
Vanuit een andere klasse wordt de waveFormat gedefinieerd, en wordt er een object aangemaakt van de TuneGenerator, waar de waveFormat aan meegegeven wordt. Nu zou naar mijn inziens waveFormat bekend moeten zijn binnen het aangemaakte object TuneGenerator, in de constructor, schrijft deze ook netjes naar de console de waarde "22050".
Echter nu wordt er vanuit mijn TuneBeheer een methode aangeroepen in de klasse TuneGenerator.
C++:
1
2
3
4
5
6
7
8
9
10
| void TuneGenerator::geneerToon(){ int intVolume = 100; int intFrequentie = 2000; Console::WriteLine("Samples per second: "+this->waveFormat.SamplesPerSecond); for(int i=0;i< waveFormat.SamplesPerSecond-1;i++){ mixBuffer[i]=(unsigned char) (intVolume*Math::Sin((double(i*2*Math::PI*intFrequentie/(waveFormat.SamplesPerSecond))))); } }; |
Echter tijdens het draaien klapt deze er hier uit met een "System.NullReferenceException" error. m.b.v. een breakpoint, kwam ik erachter dat het gebeurde op this->waveFormat.SamplesPerSecond.
Als ik tijdens het debuggen ook de waveFormat controleer, staat er ook idd achter SamplesPerSecond, "error: cannot obtain value".
Iemand die mij hier wat licht in de duisternis kan brengen, waardoor de waarde van de waveFormat niet netjes doorgegeven worden?
If it is broken, fix it. If it ain't broken, make it better!