Eso depende. Resulta que COM tiene unos lios con el "marshaling" de datos, que no es otra cosa que el proceso de empaquetado/desempaquetado de informacion entre procesos (un proceso=thread). Debido a ello, hay cosas que NO se pueden pasar, a excepcion de:
1- Tipo simples, como integer, string, etc..
2- Arrays VARIANT
3- Por lo anterior, obvio un VARIANT
4- Objetos COM.
Si deseas pasar mas de un registro, hay estas opciones:
1- Pasar array: Convierte los datos en un array, ademas de empaquetar de alguna manera la estructura de esos datos (como el nombre del campo, tipo de datos) para poder reconstruir.
2-Pasar XML: Convierte a XML. Excelente si es para pasar a travez de Internet o una intranet, si necesitas soporte multiplataforma/multilenguaje (con arrays tambien), pero no es ideal si es mucha informacion.
3-Pasar un ClientDataset: Con Delphi Enterprise puedes usar MIDAS. La opcion refacil con Delphi... Si tienes Delphi 7, tambien viene con Profesional y el MIDAS es 100% gratis.
4-Pasar ADO Recordsets: Si usas los componente ADO, la opcion obvia
5- Inventar tu propio objeto COM que respete todas la reglas de marshaling o crear tu propio sistema de marshaling=Mejor quedate con las opciones 1-4 :)
Para ejemplos:
1- Cada cual lo hace a su manera
2- Simplemente conviertes a XML y lo pasas como string normal
3- En la carpeta de Demos de Delphi hay ejemplos
4- Igual en la carpeta de demos. La diferencia es que haces una funcion que devuelva recorset como ObtenerClientes:_RecordSet15;
Listo?