This is done in a two step process. First the coordinates are converted from the source datum center to an arbitrary geocentric Euclidean space, and from there it's converted to the target datum center.
public void DatumShift(
ref double x,
ref double y,
ref double z
)member DatumShift :
x : float byref *
y : float byref *
z : float byref -> unit