Una función callback del sistema tiene que tener los parametros exactos de la API, las clases pasan a sus funciones el puntero this. Para poder usar los demás miembros vas a tener que hacer un "truquito" que consiste en pasarle el puntero this a la función estatica y hacer un casting al nombre de la clase, así podes acceder a los otros miembros si no es imposible.
A ver como hago un ejemplo ... vamos a usar una clase muy simple.
class Id
{
public:
Id()
{
myname = (char*)malloc(150);
ZeroMemory(myname,150);
}
~Id()
{
free(myname);
}
void Name(char *NewName);
const char *Name();
static DWORD WINAPI MergeIndex(LPVOID lpParam)
{
Id *xp = (Id*)lpParam;
MessageBox(0,xp->Name(),xp->Name(),0);
return 0;
}
private:
char *myname;
};
void Id::Name(char *NewName) { strcpy(myname,NewName); }
const char *Id::Name() { return myname; }
//creamos un thread con la funcion MergeIndex()
DWORD dwThreadId, dwThrdParam = 1;
Id *p = new Id[1];
p->Name("holas");
dwThrdParam = (DWORD)p;
CreateThread(NULL,NULL,p->MergeIndex,(void*)dwThrdParam,0,&dwThreadId);
Name() va a devolver "holas" por que le pasamos el puntero de la clase.