Da liegt n0_0ne richtig.
Du erzeugst ein Objekt der Klasse CShot (auf dem Stack), das aber nur in der Funktion zur Verfügung steht, in der es erzeugt wurde. Demnach bekommst du später keine Adresse auf dieses - jetzt schon nicht mehr existierende - Objekt. Also geht auch im Folgenden alles weitere schief (Rendern, ...). Wenn du das Objekt auf dem Heap anlegst (wie von n0_0ne beschrieben), dann steht es dir auch noch später zur Verfügung und du kannst mit der Adresse etwas anfangen. Allerdings solltest du nicht vergessen das Objekt - wenn du es nicht mehr brauchst - mit delete zu löschen.
Habs gerade auch mal ausgetestet. Funktioniert. Der Schuss wird gerendert.
Ach ja, kann sein das das an der Konvertierung für VC++ 2010 lag aber in den Projekteigenschaften waren bei mir nur die LIB's für die Release Version eingetragen, bei Debug fehlte einiges. Will mal hoffen du entwickelst nicht mit der Release-Version?!
Gruß
SaRu_