I had a quick play and think I've found the source of your problem. It is basically as Karlos pointed out earlier. Casting is your problem.
amiga.lib's CreateExtIO function is expecting to return an IORequest pointer. You are expecting an IOStdReq pointer.
exec.library's OpenDevice function is causing the same problem for you, but in reverse. You should cast as follows assuming your variables are still defined in the same way:
if(!(GameMP=CreatePort("RKM_game_port",0)))
cleanexit();
if(!(GameIO=(struct IOStdReq *)CreateExtIO(GameMP,sizeof(struct IOStdReq))))
cleanexit();
if(error=OpenDevice("gameport.device",1,(struct IORequest *)GameIO,0))
cleanexit();
Hope that helps.