Página 1 de 3

Libs, Legal, Mas como Fazer?

Enviado: 26 Jul 2007 20:26
por Renan
Ai pessoal Podem me ajudar a criar libs, naum sei nda para criar libs quais programas, codigos, comandos ? heheh soh sei usar hehe!

_-|Renan|-_.

Enviado: 26 Jul 2007 20:44
por Maligno
Bibliotecas são conjuntos de módulos objetos. Cada PRG criado será um módulo, onde poderão constar diversos símbolos, o que inclui funções e variáveis públicas.
Para criar bibliotecas, portanto, você precisará gerar seus objetos pela compilação dos fontes. Feito isso, bastará usar um simples utilitário que criará o arquivo de extensão LIB. Acho que o melhor, ou pelo menos o mais simples e eficiente, na minha opinião, é o TLib da Borland. Exemplo de uso:

Código: Selecionar todos

tlib myLib  +tst1,tst2,tst3 // acrescenta os OBJs à myLib
tlib myLib  -tst1,tst2,tst3 // exclui os OBJs
tlib myLib +-tst1,tst2,tst3 // substitui os OBJs
Cada movimento (inclusão, exclusão, etc) deve ser executado separadamente. Eu sei que o Clipper não usa esse utilitário. Mas eu nunca usei o LIB que acompanha o Clipper. Entretanto, o princípio é exatamente o mesmo. Basta executar o LIB do Clipper sem qualquer parâmetro e ver sua lista de opções. E leia também o NG, que contém outras informações.

Enviado: 26 Jul 2007 20:46
por Renan
Ah e Onde eu posso achar esse utilitario?

Enviado: 26 Jul 2007 20:50
por Maligno
Um adendo: caso queira usar o TLIB da Borland (versão 4.5, que acompanha o BCC) ao invés do LIB que acompanha o Clipper, é só pegar do meu site, na área "pub". Diretório "tools".

Enviado: 26 Jul 2007 20:58
por Renan
Mas tipo assim que as funcoes que estao na lib, para chama las eh normal soh por Main() ele ja olha na lib?

Enviado: 26 Jul 2007 21:10
por Maligno
Quando você executa uma função no seu programa, o compilador cria naquele lugar uma referência a esta função, como um símbolo pendente de ligação. O trabalho de ligação é feito pelo linker. Daí vem o nome. Ao usar seu linker preferido, seja ele o RTlink, que acompanha o Clipper, ou o BLinker, sua biblioteca deverá ser declarada para que ele possa pesquisar pelo símbolo pendente. Uma vez que ele encontre um nome de símbolo igual, o código a ele vinculado é ligado ao seu programa estaticamente. Ou seja, ele é incorporado ao seu EXE.
Suponhamos que seu programa tenha a chamada de uma função feita por você e incluída naquela biblioteca exemplo. Você precisa dizer ao linker onde procurar por aquele símbolo.

Código: Selecionar todos

rtlink fi teste li myLib
Apenas observe um detalhe: uma função é um símbolo que reside dentro de um módulo. Seu PRG compilado com uma ou mais funções é este módulo. É ele que será incluído na biblioteca. Portanto, se você tem um módulo com 500 funções (ou símbolos) mas usa apenas uma função, todas as outras 499 funções (ou símbolos) serão incorporados ao seu executável. Aí se vê que é necessário ter um certo cuidado na composição dos módulos (ou PRGs), a fim de evitar que seu executável se transforme num monstro. :)))

Enviado: 26 Jul 2007 21:11
por sygecom
Renan escreveu:Mas tipo assim que as funcoes que estao na lib, para chama las eh normal soh por Main() ele ja olha na lib?
Vc tem que linkar no seu script ...vc esta usando rtlink ou blinker ou.... ?

Enviado: 26 Jul 2007 21:28
por Renan
blinker, num sei pq no meu pc o rtlink da um erro dai axei o blinker eu nunca mas mexi no rtlink

Enviado: 26 Jul 2007 21:31
por Maligno
O BLinker, acredito eu, é unanimidade entre os programadores Clipper. Além do que, o RTlink que acompanha o Clipper só cria programas no modo real. E o modo protegido traz mais vantagens. Daí a turma prefere o BLinker mesmo.

Enviado: 26 Jul 2007 21:35
por sygecom
Renan escreveu:blinker, num sei pq no meu pc o rtlink da um erro dai axei o blinker eu nunca mas mexi no rtlink
O Blinker é melhor mesmo.Já sabe linkar sua lib no seu sistema ? ...se ficou com duvida posta seu .LNK que podemos montar facilmente pra vc...

Enviado: 26 Jul 2007 21:44
por Renan
nao ja sei qeu vc tem que ser assim blinker fi teste lib renaslib,vl2_52,fast,gsutil03 e la vai cacetada,naum era essa a minha duvida, tipo assim geralmente eu ponho no programa assim Main()//chama main
no fim do programa ponho la
function main ()
alert("OI,LIBS")
return nil
c eu por a essa funcao na obj trans pra lib e linka junto eu posso tira a function main do programa principal

Enviado: 26 Jul 2007 21:49
por Eolo
Uma pergunta, pra complicar: se, no Clipper, todas as funções são "incluídas" no EXE e você não precisa distribuir a LIB com o seu sistema, então qual a vantagem de se criar LIBs? O tempo da compilação?

Enviado: 26 Jul 2007 21:49
por sygecom
Renan escreveu:nao ja sei qeu vc tem que ser assim blinker fi teste lib renaslib,vl2_52,fast,gsutil03 e la vai cacetada,naum era essa a minha duvida, tipo assim geralmente eu ponho no programa assim Main()//chama main
no fim do programa ponho la
function main ()
alert("OI,LIBS")
return nil
c eu por a essa funcao na obj trans pra lib e linka junto eu posso tira a function main do programa principal
Não entendi muito bem, mas seria algo assim hoooo....sua function main() ficaria na LIB e vc linka essa lib como no seu exemplo...e pode chamar ela de qualquer aprte do seu sistema.

Enviado: 26 Jul 2007 21:50
por Maligno
A principal vantagem, Eolo, é o reaproveitamente e distribuição de código. Se não fossem as LIBs, a CATools, por exemplo, seria uma coleção imensa de objetos.

Enviado: 26 Jul 2007 21:52
por sygecom
Eolo escreveu:Uma pergunta, pra complicar: se, no Clipper, todas as funções são "incluídas" no EXE e você não precisa distribuir a LIB com o seu sistema, então qual a vantagem de se criar LIBs? O tempo da compilação?
Eu tenho em Minha Lib varias funções que uso em varios sistemas....vamos dizer que seria um jeito facil de carregar todas essas minhas funções de um sistema para o outro. e seu tiver alguma alteração...ou inclusão soh subistituo a LIB e não altero cada PRG.