Preferência de bibliotecas
Moderador: Moderadores
Preferência de bibliotecas
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?
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?
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?
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!
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!
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.
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
Foi o que imaginei. Apesar de que não há muito o que ser diferente numa função desse tipo.pringles escreveu:a PTOOL52 fornece outra função com o mesmo nome, mas parâmetros diferentes dos que eu preciso.
[]'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!
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!
- Pablo César
- Usuário Nível 7

- Mensagens: 5312
- Registrado em: 31 Mai 2006 10:22
- Localização: Curitiba - Paraná
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.
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.
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.
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.
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
Não funcionou? Já me ocorreu o mesmo tipo de problema e resolvi alterando a ordem das LIBs.pringles escreveu:Na verdade, mesmo acertando a ordem das bibliotecas, ocorria o mesmo problema.
[]'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!
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!
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.
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!
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!
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.
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!
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!
- Pablo César
- Usuário Nível 7

- Mensagens: 5312
- Registrado em: 31 Mai 2006 10:22
- Localização: Curitiba - Paraná
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.
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.
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.
Como já consegui resolver o problema pelos parâmetros informados, ainda não fiz o teste.Pablo César escreveu:Pringles, você tentou com a minha indicação de deletar a função da LIB ?
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.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.
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

