Non credo sia così impossibile cominciare a dare qualche suggerimento, siccome la mia domanda era...
E' possibile leggere dei valori di ritorno da un oggetto COM?? se si.. come?
Comunque metto un pò di codice.

Questo è il codice della COM, scritta in C#, che vi ho semplificato al massimo:
codice:
using System;
using System.Runtime.InteropServices;

namespace OSNETDBInterface
{
	[GuidAttribute("E1362857-D6CC-4541-8971-61CC776ADF83")]
	
	public interface IDbInterface
	{
		uint nCols
		{
		    get;
		}
		ulong nRows
		{
		    get;
		}
		
	}
	[ClassInterface(ClassInterfaceType.None)]
	public class DbInterface : IDbInterface
	{
		private uint _nCols=0;
		private ulong _nRows=0;

		public uint nCols
		{
			get{return _nCols;}
		}
		public ulong nRows
		{
			get{return _nRows;}
		}


		public DbInterface()
		{
                 _nCols=5;
		_nRows = 35000;
             }
	}
}
Da C++, tenendo conto che ho già istanziato l'oggetto, e che ho ottenuto il puntatore alla sua interfaccia:
codice:
//prtDb è il puntatore all'interfaccia
printf("(DB Module)ptrDB->nRows %d", ptrDB->nRows);
printf("(DB Module)ptrDB->nCols %d", ptrDB->nCols);
L'output delle printf è sempre una stesso valore numerico, e non corrisponde ai valori assegnati nel costruttore.