Intanto non condividi una classe ma un oggetto di una certa classe (ovvero una istanza di una classe). Quindi i due programmi punteranno allo stesso oggetto di una determinata classe.
Nessun indirizzo deve essere inviato da nessuna parte.
Quando l'area di memoria condivisa viene mappata, i due processi ottengono un indirizzo che non deve essere necessariamente uguale, ma che "punta" agli stessi dati condivisi.
Nel primo codice, nella linea
CopyMemory(pBufObject1, pTempObject, sizeof(pTempObject));
vedo che c'e' pBufObject1 invece di pBufObject e poi usi sizeof(pTempObject) che restituisce 4 essendo pTempObject un puntatore. Inoltre, bisogna vedere come e' dichiarata la classe, dato che se contiene puntatori, questi possono creare problemi.
Nel secondo codice inoltre, utilizzi clCliente come se fosse un puntatore alla classe, quando non e' cosi' perche' hai scritto
Clienti clCliente;