[Lazarus-es] Librerías de objetos Visual Studio.
JoshyFun
joshyfun en gmail.com
Vie Nov 20 12:56:15 CET 2009
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
More information about the Lazarus-es
mailing list