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