Perhaps try to isolate the error down to the smallest chunk that would create the error; For example, if the Test.cpp code is:
Msg_t *new_node[10];
const char *src = "E0";
_strdup(src);
Do you still get the error message here?
Or if that works, how about here? Does that compile fine?
Msg_t *new_node[10];
const char *src = "E0";
unsigned char *testresult;
testresult = (unsigned char *) _strdup(src);
Also, you can find some documentation here
_strdup, _wcsdup, _mbsdup for _strdup.
It seems like it might already being returning (char *) and perhaps you could just adjust the structure to align with what it is returning.
Explicitly, if the structure is changed to:
typedef struct Msg
{
char *message_id;
char *message_name;
}Msg_t;
then does the same issue occur?