Finally, thanks to everyones help, Ive got it.
Here are the working prototypes for the functions.
Code:
//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.
Code:
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.


"There is no fate but what WE make." - CEO Cyberdyne Systems Corp.
A8.30.5 Commercial