[Lazarus-es] Librerías de objetos Visual Studio.

Iván Mesa imo_mas en yahoo.es
Vie Nov 20 13:08:53 CET 2009


Te has explicado perfectamente.
Me parece que voy a estudiarlo bien porque puede ser la solución.
Gracias.





________________________________
De: JoshyFun <joshyfun en gmail.com>
Para: Spanish version of Lazarus List <lazarus-es en lists.lazarus.freepascal.org>
Enviado: vie,20 noviembre, 2009 12:56
Asunto: Re: [Lazarus-es] Librerías de objetos Visual Studio.

Hello Iván,

Friday, November 20, 2009, 9:42:13 AM, you wrote:

IM> El problema que me estoy encontrando, es que los equipos con
IM> los que trabajo disponen de SDK's para programar en VS, que son
IM> fáciles de usar, pero que luego, en Lazarus, no se si es posible
IM> aprovechar.
[...]
IM> se pueden usar con la herramienta para la que son diseñadas.
IM> ¿Qué hay de verdad en eso?
IM> ¿Hay alguna manera de poder aprovechar esas librerías?
IM> ¿Tendría que contactar con el programador que las hizo para que las adaptara?
IM> Cualquier información me vendría bien.

Las librerías pueden ser en C, esto es con funciones planas
las cuales puedes importar directamente en Lazarus y que sólo requiere
que conviertas las estructuras necesarias a pascal (h2pas puede ayudar
mucho en eso).
Y las librerías pueden ser C++ que sólo pueden ser usadas por el mismo
compilador que las generó (con raras excepciones). En estos casos se
suele hacer un "aplanamiento" mediante el mismo compilador de C++.
Para realizar el aplanamiento primero necesitas saber si vas a tener
que derivar clases del SDK, esto es si tus funciones van a usar las
clases que ya hay en el SDK o vas a necesitas redefinir nuevas clases
derivadas de las que vienen. Todas las derivaciones de esas clases
tendrás que hacerlas en el compilador de C++ y después realizar el
aplanamiento de todo el conjunto.

Para realizar el aplanamiento es relativamente sencillo, pero un
trabajo manual y un poco tedioso la verdad, y creo que se explica
mejor si hago un ejemplo en pseudo-codigo, para ello supongamos un
clase en C++ que maneja ficheros, como el TFileStream de pascal (no
recurdo bien la sintaxis de C++, ojo).

class CFileStream
{
public:
  HANDLE OpenFile(char *FileName);
  CloseFile(HANDLE Handle);
}

Para aplanar esta función necesitamos crear varios datos, uno que
controle la instancia, y funciones que creen y destruyan la clase:

void *CFileStream_Create()
{
  return new CFileStream;
}

void CFileStream_Destroy(void *CFileStream_Handle);
{
  delete (CFileStream)CFileStream_Handle;
}

Lo de arriba es más o menos igual para todas las clases.

HANDLE CFileStream_OpenFile(void *CFileStream_Handle, char *FileName)
{
  return (CFileStream)CFileStream_Handle->OpenFile(FileName);
}

void CFileStream_CloseFile(void *CFileStream_Handle, HANDLE Handle)
{
  (CFileStream)CFileStream_Handle->CloseFile(Handle);
}

Y ahora exportas esas funciones y ya puedes crear y usar las clases de
C++ en tu programa en Lazarus.

Espero haberlo explicado más o menos :)

-- 
Best regards,
JoshyFun


_______________________________________________
Lazarus-es mailing list
Lazarus-es en lists.lazarus.freepascal.org
http://lists.lazarus.freepascal.org/mailman/listinfo/lazarus-es



      
------------ próxima parte ------------
Se ha borrado un adjunto en formato HTML...
URL: <http://lists.lazarus-ide.org/pipermail/lazarus-es/attachments/20091120/71f7363c/attachment-0002.html>


More information about the Lazarus-es mailing list