[Lazarus-es] Problema con libreria c

Maxi maximiliano.duarte en gmail.com
Vie Ago 17 16:51:52 CEST 2012


El día 17 de agosto de 2012 09:46, Sergio Pedraza
<spedraza69 en hotmail.com> escribió:
>
> Por lo que vos me decis tendria que pasar todo los .h a pas
> Y no tengo que usar la librería, ya que pasaria a ser codigo nativo
> De lazarus ?
>
> -----Mensaje original-----
> De: Maxi [mailto:maximiliano.duarte en gmail.com]
> Enviado el: Jueves, 16 de Agosto de 2012 05:03 p.m.
> Para: Spanish version of Lazarus List
> Asunto: Re: [Lazarus-es] Problema con libreria c
>
> El día 16 de agosto de 2012 16:57, Maikel Enrique Pernía Matos
> <reprepoli2mz en infomed.sld.cu> escribió:
>> Con esto tengo mis dudas, he utilizado poco librerías de terceros o
> propias
>> y en app que he desarrollado en object pascal (estas han sido desde
> delphi);
>> pero recuerdo que cada librería se aconmpañaba con un fichero *.pas que
>> declaraba las funciones que dicha librería exportaba y entonces era que
>> podía vincularlas con mi app esto desde la clausula "use" de mi fichero
>> *.pas. En C y C++ lo ha realizado con más frecuencia fundamentalmente
> desde
>> GNU/Linux y de manera similar cada librería se acompaña con un fichero de
>> cabeceras *.h donde se declaran las mismas funciones que se exportan desde
>> la librería ya sea dinámica *.so o estática *.a y se vinculan a mi app
> así:
>> #include <nombre_libreria.h> o  #include "nombre_libreria.h".
>> Pregunto:
>> ¿Qué habría que hacer, crear la librería y llevar los *.h a *.pas o
> utilizar
>> la librería y los *.h?
>>
>> El jue, 16-08-2012 a las 16:37 -0300, Maxi escribió:
>>
>> 2012/8/16 Pedraza Sergio <spedraza69 en hotmail.com>:
>>>
>>> > Te paso los archivos make tanto de windows como Linux
>>> >
>>> > make_win32
>>> > --------------------------------------------------
>>> > INCLUDE=-I.
>>> > CXXFLAGS=$(INCLUDE) -DP_WIN32 -DP_WIN32_GCC
>>> > FISCAL_LIB=clasefiscal.a
>>> > all: $(FISCAL_LIB) clasefiscal
>>> >
>>> > #depend:
>>> > #    makedepend $(INCLUDE) *.cpp
>>> >
>>> > clasefiscal_objs =  debug.o Excepcion.o ImpresorFiscal16Bits.o \
>>> >         ImpresorFiscal8Bits.o ImpresorFiscal.o Mutex.o P262_100.o \
>>> >         P272_100.o P320_100.o P321_100.o P322_100.o P322_201.o P322.o \
>>> >         P330_100.o P330_201.o P330_202.o P330.o P425_100.o P425_201.o \
>>> >         P425.o P435_100.o P435_101.o P435.o P614_100.o P615_100.o \
>>> >         P715_100.o P715_201.o P715_302.o P715_403.o P715.o P950_100.o \
>>> >         P951_100.o PJ20_100.o PPL8_100.o PPL8_201.o PPL8.o PPL9_100.o \
>>> >         PPR4_100.o PPR5_100.o PPR5_201.o PPR5.o PPL23_100.o PPL23_101.o
>>> > \
>>> >         PPL23.o Protocolo.o PuertoSerie.o Socket.o ssplit.o Chars.o \
>>> >         Select.o
>>> > $(FISCAL_LIB): $(clasefiscal_objs)
>>> >    ar rvu $(FISCAL_LIB) $(clasefiscal_objs)
>>> >    ranlib $(FISCAL_LIB)
>>> >
>>> > clasefiscal: ClaseFiscal.o $(FISCAL_LIB)
>>> >    $(CXX) ClaseFiscal.o $(FISCAL_LIB) -o clasefiscal -lwsock32
>>> > --------------------------------------------------
>>> >
>>> > makefile_linux
>>> > ---------------------------------------------------
>>> > INCLUDE=-I.
>>> > CXXFLAGS=$(INCLUDE) -DP_LINUX
>>> > FISCAL_LIB=clasefiscal.a
>>> > all: $(FISCAL_LIB) clasefiscal
>>> >
>>> > #depend:
>>> > # makedepend $(INCLUDE) *.cpp
>>> >
>>> > clasefiscal_objs =  debug.o Excepcion.o ImpresorFiscal16Bits.o \
>>> >         ImpresorFiscal8Bits.o ImpresorFiscal.o Mutex.o P262_100.o \
>>> >         P272_100.o P320_100.o P321_100.o P322_100.o P322_201.o P322.o \
>>> >         P330_100.o P330_201.o P330_202.o P330.o P425_100.o P425_201.o \
>>> >         P425.o P435_100.o P435_101.o P435.o P614_100.o P615_100.o \
>>> >         P715_100.o P715_201.o P715_302.o P715_403.o P715.o P950_100.o \
>>> >         P951_100.o PJ20_100.o PPL8_100.o PPL8_201.o PPL8.o PPL9_100.o \
>>> >         PPR4_100.o PPR5_100.o PPR5_201.o PPR5.o PPL23_100.o PPL23_101.o
>>> > \
>>> >         PPL23.o Protocolo.o PuertoSerie.o Socket.o ssplit.o Chars.o \
>>> >         Select.o
>>> > $(FISCAL_LIB): $(clasefiscal_objs)
>>> > ar rvu $(FISCAL_LIB) $(clasefiscal_objs)
>>> > ranlib $(FISCAL_LIB)
>>> >
>>> > clasefiscal: ClaseFiscal.o $(FISCAL_LIB)
>>> > $(CXX) ClaseFiscal.o $(FISCAL_LIB) -o clasefiscal -lpthread
>>> >
>>> >
> --------------------------------------------------------------------------
>>> >
>>> > La pregunta es como hago para compilar y transformar el codigo en c en
>>> > una
>>> > libreria para windows o Linux ?
>>> >
>>> > Muchas Gracias
>>> > Sergio Pedraza
>>> >
>>> >
>>> > --------------------------------------------------
>>> > From: "Maxi" <maximiliano.duarte en gmail.com>
>>> > Sent: Monday, August 13, 2012 11:54 AM
>>> > To: "Spanish version of Lazarus List"
>>> > <lazarus-es en lists.lazarus.freepascal.org>
>>> > Subject: Re: [Lazarus-es] Problema con libreria c
>>> >
>>> >> Y el codigo?
>>> >>
>>> >> --
>>> >> El que pregunta aprende, y el que contesta aprende a responder.
>>> >>
>>> >> No a la obsolecencia programada:
>>> >>
>>> >>
>>> >>
> http://dimensionargentina.blogspot.com/2011/01/todo-esta-disenado-para-rompe
> rse.html
>>> >>
>>> >> Linux User #495070
>>> >> http://domonetic.com/blog
>>> >>
>>> >> _______________________________________________
>>> >> Lazarus-es mailing list
>>> >> Lazarus-es en lists.lazarus.freepascal.org
>>> >> http://lists.lazarus.freepascal.org/mailman/listinfo/lazarus-es
>>> >>
>>> >
>>> > _______________________________________________
>>> > Lazarus-es mailing list
>>> > Lazarus-es en lists.lazarus.freepascal.org
>>> > http://lists.lazarus.freepascal.org/mailman/listinfo/lazarus-es
>>>
>>> con make desde linux te crea el archivo.o que el la libreria, si tenes
>>> todos los fuentes no necesitas transformarlo a pascal sino generar la
>>> dll y usarla con las declaraciones en tu fuente y listo. Creoque podes
>>> usar make en windows.
>>>
>>> --
>>> El que pregunta aprende, y el que contesta aprende a responder.
>>>
>>> No a la obsolecencia programada:
>>>
>>>
> http://dimensionargentina.blogspot.com/2011/01/todo-esta-disenado-para-rompe
> rse.html
>>>
>>> Linux User #495070
>>> http://domonetic.com/blog
>>>
>>> _______________________________________________
>>> Lazarus-es mailing list
>>> Lazarus-es en lists.lazarus.freepascal.org
>>> http://lists.lazarus.freepascal.org/mailman/listinfo/lazarus-es
>>>
>>
>> ----------------------------------------------------------------
>> This message was sent using IMP, the Internet Messaging Program.
>>
>>
>> --
>>
>> Este mensaje le ha llegado mediante el servicio de correo electronico que
>> ofrece Infomed para respaldar el cumplimiento de las misiones del Sistema
>> Nacional de Salud. La persona que envia este correo asume el compromiso de
>> usar el servicio a tales fines y cumplir con las regulaciones establecidas
>>
>> Infomed: http://www.sld.cu/
>>
>>
>> _______________________________________________
>> Lazarus-es mailing list
>> Lazarus-es en lists.lazarus.freepascal.org
>> http://lists.lazarus.freepascal.org/mailman/listinfo/lazarus-es
>
> tenes que pasar los .h a .pas manteniendolos tipos de datos iguales,
> si usa un int en C, integer en pascal, los struct a record, esto es lo
> que hizo Delphi para usar las apis de windows.
>
>
> --
> El que pregunta aprende, y el que contesta aprende a responder.
>
> No a la obsolecencia programada:
> http://dimensionargentina.blogspot.com/2011/01/todo-esta-disenado-para-rompe
> rse.html
>
> Linux User #495070
> http://domonetic.com/blog
>
> _______________________________________________
> Lazarus-es mailing list
> Lazarus-es en lists.lazarus.freepascal.org
> http://lists.lazarus.freepascal.org/mailman/listinfo/lazarus-es
>
>
> _______________________________________________
> Lazarus-es mailing list
> Lazarus-es en lists.lazarus.freepascal.org
> http://lists.lazarus.freepascal.org/mailman/listinfo/lazarus-es


No vamos por partes, si tenes la .dll o .so ya compilado listo para
usar, en tu fuente solo tenes que declarar el nombre de la funcion
Ejemplo:

procedure HolaMundo; external  cdecl  'archivoDLL.dll'
function Suma(A,B:integer):Integer; external  stdcall  'archivoDLL.dll'

Donde cdecl o stdcall es la forma en que se pasan los parametros; Si
los parametros tienen estructuras tenes que crear los registro para
tal fin

Ahora si esto lo tenes en un .h tenes que transformarlo para que se
entienda en pascal. lo incluis en tu formulario o unidad y listo.

struct Persona {
   char Nombre[65];
   char Direccion[65];
   int AnyoNacimiento;
}

en Pascal

Record Persona {
   Nombre: Array[65] of char;
   Direccion: Array [65] of char ;
   AnyoNacimiento:Integer;
}

No soy guru ni nada por el estilo, estudie ambos lenguajes y me quede
con pascal. Entre todos podemos ayudarle a pasar las estructuras y
quedaria algo util para la comunidad como son las impresoras de este
tipo.

-- 
El que pregunta aprende, y el que contesta aprende a responder.

No a la obsolecencia programada:
http://dimensionargentina.blogspot.com/2011/01/todo-esta-disenado-para-romperse.html

Linux User #495070
http://domonetic.com/blog




More information about the Lazarus-es mailing list