Semplificando un pò il discorso del link, lo stesso principio si può applicare anche al funzionamento di una libreria .lib tra versioni diverse dello stesso compilatore (purché l'operazione di linking vada a buon fine).
In pratica, l'allocazione di memoria dovrebbe farla la libreria tramite una funzione esportata, l'interfaccia della classe che usi dovrebbe essere astratta pura e la memoria dovrebbe essere rilasciata sempre dalla libreria (anche perché gli allocatori sono liberi di usare strategie diverse).
Questo perché non hai nessuna garanzia che il codice libreria di VC6 sia compatibile con quello di VS2010. Il modo con cui è implementato l'operatore new può essere diverso, influenzando gli offset della classe esposta dalla libreria, per cui ti trovi tutti i valori sballati.
Detto in parola povere, in C++ non hai garanzie che l'interfaccia della classe che vuoi usare sia esposta nello stesso modo tra le due versioni di VC.
E la prova è che inserendo il sorgente della classe nel tuo progetto, tutto funzioni normalmente.