Finally, thanks to everyones help, Ive got it.
Here are the working prototypes for the functions.
//Declares/Prototypes
void PopupMenu(PANEL* ReturnPanel, STRING* SourceData, int layer);
void PopupMenu(PANEL* ReturnPanel, STRING* SourceData, int layer, int pos_x, int pos_y);
void PopupMenu(PANEL* ReturnPanel, STRING* SourceData, int layer, int pos_x, int pos_y, STRING* font);
and I dont need to put any typecasting in the calls except for _str() to use char constants.
PANEL* NewPanel=NULL;
...
PopupMenu(NewPanel, _str("SendThisAsString"), 1, 100, 200);
... Gives me
......'ReturnPanel' is a pointer to NewPanel,
......'SourceData' is a string containing "SendThisAsString",
......'layer' in an int containing '1',
......'x_pos' in an int containing '100',
......'y_pos' in an int containing '200'
Exactly what I wanted, and I now understand fully what I was doing wrong.
Another couple of things I leaned today were
1> if you pass a char constant parameter (eg
func("xx");) it is converted to string automatically,
BUT GETS TREATED AS A CHAR ARRAY for deciding which overload to run.
2> Numeric constant parameters default to "int" in the call (ie
func(15); == func((int)15);)
but the end function MUST specify that it is expecting an "int". ie
func( int InValue ) {...}I hope my problems here are of help to someone else.
And once again, thanks to ALL who helped me over this mental block.