Preferência de bibliotecas

Fórum sobre a linguagem CA-Clipper.

Moderador: Moderadores

Avatar do usuário
pringles
Usuário Nível 3
Usuário Nível 3
Mensagens: 278
Registrado em: 29 Mai 2007 16:35
Localização: Botucatu-SP

Preferência de bibliotecas

Mensagem por pringles »

Pessoal, me surgiu uma situação interessante: utilizo Clipper 5.2 e Blinker. Em meu sistema para emissão de cupom fiscal (cuja impressora fiscal utilizada é da Bematech) utilizo duas bibliotecas: PTOOL52 e BEMAFI, sendo esta última a biblioteca da Bematech.
Em ambas as bibliotecas, existe a função FILESIZE, com o mesmo nome, mas com parâmetros e retornos diferentes. O problema é que: ao utilizar esta função, preciso utilizá-la na biblioteca BEMAFI, e o compilador utiliza a função da biblioteca PTOOL52, já que as duas bibliotecas estão incluídas no código e são utilizadas pelo mesmo.
Existe algum modo pra que eu possa alterar essa ordem de preferência, de forma a deixar a BEMAFI em "primeiro plano", ou seja, quando as funções tiverem o mesmo nome dar preferência para a função da BEMAFI, ao invés do contrário?
Avatar do usuário
Maligno
Membro Master
Membro Master
Mensagens: 6398
Registrado em: 06 Jul 2004 01:40
Localização: Londrina/PR

Mensagem por Maligno »

A preferência se dará pela ordem em que as bibliotecas forem informadas. Se informar a BEMAFI primeiro, o símbolo pendente (FILESIZE) a ela será vinculado.
Mas, em vista dos nomes sugerirem funções exatamente iguais, que diferença faz se a função vier de uma ou outra? Algum parâmetro extra?
[]'s
Maligno
---
Não respondo questões técnicas através de MP ou eMail. Não insista.
As dúvidas devem ser postadas no fórum. Desta forma, todos poderão
se beneficiar das respostas.

---
Se um dia precisar de uma transfusão de sangue você perceberá como
é importante a figura do doador. Procure o hemocentro de sua cidade e
se informe sobre a doação de sangue, plaquetas e medula óssea. Doe!
Avatar do usuário
pringles
Usuário Nível 3
Usuário Nível 3
Mensagens: 278
Registrado em: 29 Mai 2007 16:35
Localização: Botucatu-SP

Mensagem por pringles »

Maligno, obrigado pela dica, vou testar e depois posto o resultado.
Na verdade, as sintaxes são diferentes com relação aos parâmetros utilizados: a BEMAFI me fornece a função de que eu preciso; já a PTOOL52 fornece outra função com o mesmo nome, mas parâmetros diferentes dos que eu preciso.
CLIPPER 5.2 / BLINKER
Avatar do usuário
Maligno
Membro Master
Membro Master
Mensagens: 6398
Registrado em: 06 Jul 2004 01:40
Localização: Londrina/PR

Mensagem por Maligno »

pringles escreveu:a PTOOL52 fornece outra função com o mesmo nome, mas parâmetros diferentes dos que eu preciso.
Foi o que imaginei. Apesar de que não há muito o que ser diferente numa função desse tipo. :)
[]'s
Maligno
---
Não respondo questões técnicas através de MP ou eMail. Não insista.
As dúvidas devem ser postadas no fórum. Desta forma, todos poderão
se beneficiar das respostas.

---
Se um dia precisar de uma transfusão de sangue você perceberá como
é importante a figura do doador. Procure o hemocentro de sua cidade e
se informe sobre a doação de sangue, plaquetas e medula óssea. Doe!
Avatar do usuário
Pablo César
Usuário Nível 7
Usuário Nível 7
Mensagens: 5312
Registrado em: 31 Mai 2006 10:22
Localização: Curitiba - Paraná

Mensagem por Pablo César »

Caro Pringles,

Existe uma forma de excluir a função de uma biblioteca, utilizando o LIBRA.EXE (creio que outras também o fazem). Para esse caso de funções em duplicidade e você queira obtar apena por uma ou outra, bastaria excluir a que função da biblioteca que você não quer.
Um clip-abraço !

Pablo César Arrascaeta
Compartilhe suas dúvidas e soluções com todos os colegas aqui do fórum.
Evite enviar as dúvidas técnicas por MPs ou eMails, assim todos iremos beneficiar-nos.
Avatar do usuário
pringles
Usuário Nível 3
Usuário Nível 3
Mensagens: 278
Registrado em: 29 Mai 2007 16:35
Localização: Botucatu-SP

Mensagem por pringles »

Entendi, mas já consegui resolver o problema.
Na verdade, mesmo acertando a ordem das bibliotecas, ocorria o mesmo problema. O que eu fiz foi alterar alguns parâmetros dentro da função de forma a deixá-las com sintaxe diferente. Assim, não ocorre conflito.
Mesmo assim vou testar este comando para excluir função, obrigado pelas dicas.
CLIPPER 5.2 / BLINKER
Avatar do usuário
Maligno
Membro Master
Membro Master
Mensagens: 6398
Registrado em: 06 Jul 2004 01:40
Localização: Londrina/PR

Mensagem por Maligno »

pringles escreveu:Na verdade, mesmo acertando a ordem das bibliotecas, ocorria o mesmo problema.
Não funcionou? Já me ocorreu o mesmo tipo de problema e resolvi alterando a ordem das LIBs.
[]'s
Maligno
---
Não respondo questões técnicas através de MP ou eMail. Não insista.
As dúvidas devem ser postadas no fórum. Desta forma, todos poderão
se beneficiar das respostas.

---
Se um dia precisar de uma transfusão de sangue você perceberá como
é importante a figura do doador. Procure o hemocentro de sua cidade e
se informe sobre a doação de sangue, plaquetas e medula óssea. Doe!
Avatar do usuário
pringles
Usuário Nível 3
Usuário Nível 3
Mensagens: 278
Registrado em: 29 Mai 2007 16:35
Localização: Botucatu-SP

Mensagem por pringles »

Será que não deu certo por se tratar da BEMAFI, que é uma biblioteca um pouco diferente das mais comumente utilizadas?
CLIPPER 5.2 / BLINKER
Avatar do usuário
Maligno
Membro Master
Membro Master
Mensagens: 6398
Registrado em: 06 Jul 2004 01:40
Localização: Londrina/PR

Mensagem por Maligno »

Quando o linker encontra uma referência a um símbolo, ele pesquisa na primeira LIB que aparecer. Se encontrar este símbolo, morreu. A pendência foi resolvida. Se existir numa outra biblioteca, não fará a menor diferença. Ele não está mais procurando por esse nome.
Inclusive, daí vêm alguns problemas quando criamos uma função com um nome coincidente com o de um símbolo numa LIB qualquer. A coisa não funciona e você não sabe por quê. Depois é que você descobre que criou um nome que já existia. Às vezes isso dá uma mão-de-obra lascada. :)

Situação um pouco pior: um símbolo (variável ou função) reside num módulo. Este módulo pode conter vários símbolos. Um deles tem nome coincidente com uma função que reside em outra LIB, em outro módulo. Cada módulo tem símbolos essenciais para o programa. Não tem como separar. Se consertar de um lado, estraga do outro.
[]'s
Maligno
---
Não respondo questões técnicas através de MP ou eMail. Não insista.
As dúvidas devem ser postadas no fórum. Desta forma, todos poderão
se beneficiar das respostas.

---
Se um dia precisar de uma transfusão de sangue você perceberá como
é importante a figura do doador. Procure o hemocentro de sua cidade e
se informe sobre a doação de sangue, plaquetas e medula óssea. Doe!
Avatar do usuário
Maligno
Membro Master
Membro Master
Mensagens: 6398
Registrado em: 06 Jul 2004 01:40
Localização: Londrina/PR

Mensagem por Maligno »

Apenas uma curiosidade: situações como essa são facilmente resolvíveis em linguagens mais modernas através de uma técnica chamada de name mangling, que não usa para o símbolos exatamente os nomes que lhes damos. Alguma informação extra é adicionada ao nome. Aliás, o nome correto da técnica, mas não tão usual, é [n]name-decorating[/i]. Mas daí não existe conflito algum e esse tipo de problema não acontece. Nem poderia, pois existem linguagens OOP que dispõem da característica de function overloading, onde podem ser definidas várias funções diferentes com o mesmo nome.

O único senão é que cada empresa tem uma técnica própria para name mangling. Mas este problema deixa de existir se o programa for compilado pelo mesmo compilador que criou a biblioteca ou se for utilizado algum tipo de "tradutor", por vezes como uma diretiva de pré-processamento. Em alguns casos, aliás, é necessário um switch para o unmangling de uma porção de código que não usa a técnica.
[]'s
Maligno
---
Não respondo questões técnicas através de MP ou eMail. Não insista.
As dúvidas devem ser postadas no fórum. Desta forma, todos poderão
se beneficiar das respostas.

---
Se um dia precisar de uma transfusão de sangue você perceberá como
é importante a figura do doador. Procure o hemocentro de sua cidade e
se informe sobre a doação de sangue, plaquetas e medula óssea. Doe!
Avatar do usuário
pringles
Usuário Nível 3
Usuário Nível 3
Mensagens: 278
Registrado em: 29 Mai 2007 16:35
Localização: Botucatu-SP

Mensagem por pringles »

Realmente interessante....
Vou fazer o seguinte: vou revisar o meu código e posto depois o que pode ter ocorrido.
CLIPPER 5.2 / BLINKER
Avatar do usuário
Pablo César
Usuário Nível 7
Usuário Nível 7
Mensagens: 5312
Registrado em: 31 Mai 2006 10:22
Localização: Curitiba - Paraná

Mensagem por Pablo César »

Pringles, você tentou com a minha indicação de deletar a função da LIB ?

A função FILESIZE é utilizado pela BEMAFI ?. Seria o mais indicado então deletar o FILESIZE da PTOOL52 ?

O FILESIZE da PTOOL52, você utiliza no seu sistema em alguma ocasião ?. Se for daria para substituir tranquilamenter por outra função ora feita por ti mesmo.
Um clip-abraço !

Pablo César Arrascaeta
Compartilhe suas dúvidas e soluções com todos os colegas aqui do fórum.
Evite enviar as dúvidas técnicas por MPs ou eMails, assim todos iremos beneficiar-nos.
Avatar do usuário
pringles
Usuário Nível 3
Usuário Nível 3
Mensagens: 278
Registrado em: 29 Mai 2007 16:35
Localização: Botucatu-SP

Mensagem por pringles »

Pablo César escreveu:Pringles, você tentou com a minha indicação de deletar a função da LIB ?
Como já consegui resolver o problema pelos parâmetros informados, ainda não fiz o teste.
Pablo César escreveu:A função FILESIZE é utilizado pela BEMAFI ?. Seria o mais indicado então deletar o FILESIZE da PTOOL52 ?
O FILESIZE da PTOOL52, você utiliza no seu sistema em alguma ocasião ?. Se for daria para substituir tranquilamenter por outra função ora feita por ti mesmo.
Não utilizo em outras ocasiões o FILESIZE da PTOOL52, mas se tivesse meio de deixá-lo disponível para alguma situação futura eu preferiria. Por isso ainda não testei este método, mas vou testá-lo o quanto antes.

Mesmo assim, obrigado Pablo e Maligno, vou dar uma olhada melhor e fazer mais alguns testes e posto no fórum depois.
CLIPPER 5.2 / BLINKER
Responder