You can try calling it via a typedef to see if it is working.
Code:
typedef Vector (__thiscall *tGetShootPos)(CBasePlayer*);
tGetShootPos shootPos = (tGetShootPos)addr;
Vector vec = shootPos(pPlayer);
Isn't Weapon_ShootPosition virtual? You don't need a signature scan to call it. Maybe you're accidently calling the wrong function(wrong signature?)