Si te atascas, probablemente te sea cómodo hacerlo en un lenguaje de programacion, tipo C, C++... O el que sea que uséis. Luego, la lógica es la misma, solo hay que retocar los bucles y las condiciones.
Ignorando el tema de la DLL: No puedes usar un puntero que no tiene valor. Un puntero no es un objeto de la clase CHeatSolver. Si necesitas un objeto de esa clase, creala sin el puntero.
Es simplemente natural. Toda novedad se acaba estandarizando y regularizando. Internet no es nada mágico. Y la verdad es que veo el tema muy correcto. Es lo mismo que se hace con otros servicios; internet es uno más. Nada debería escapar de los ojos del estado.
Estás creando el array con N elementos, siendo N = jugadores. El problema es que jugadores no tiene valor ene se punto. Lo que tendrías que hacer es que nJugadores no tenga valor (null), y en el método inicioPartida le das valor con new, una evz sepas ya el número de jugadores. Podrías ahorrarte incluso la variable "jugadores", ya que para saber el numero de jugadores, te llegaría con hacer "nJugadores.length"
Ok, pero el primer caso me daba error, no podía si quiera mostrar la dirección de memoria..
Pongamos un caso. Desde un programa escribes esa estrucutra y se escribe la direccion del char*. Desde otro programa, lees esa dirección en la estructura. Esa dirección casi seguro que no pertenece a tu programa, es una dirección de memoria a la que tu programa no tiene acceso. Intentar leerla, en muchos casos, dará un error.