You need Pointer-Pointer...
Change the Name functions To...
virtual void Name(char** value)
{
*value = (char*)"hello base class";
}
void Name(char** value) override
{
*value = _name;
}
then test, like this
controlClass oControlClass;
char * psz = 0x00;
oControlClass.GetBaseClassList()[0]->Name((char**)&psz);
printf(psz);
oControlClass.GetBaseClassList()[1]->Name((char**)&psz);
printf(psz);