||In order to project any geometry (point, polyline, polygon, etc), it must first have an initial spatial reference. If the geometry doesn't have a spatial reference, then you can't project it because the "from" spatial reference is unknown and there is no way for it to know what conversion algorithm to use. You set the spatial reference by setting the geometry's SpatialReference property. Once this is done, you can project it to any projected coordinate system by calling Project and passing in the desired spatial reference.
The code you last posted does not set the initial spatial reference. Explaining it in terms that are more easily understood, it's like converting a length in feet to meters. If I ask you to convert 100 feet to meters, you know how to do that because it's a simple matter of applying a conversion factor. But if I asked you to convert 100 to meters, you can't do that because you don't know what the initial units are. 100 what? You need to know the original units in order to determine what conversion factor to apply.
The code below shows the general way to do this. In this code, fromSpatialReference should be the geographic coordinate system and toSpatialReference should be the projected coordinate system.
The developer help topic for IGeometry::Project also has an example.