Página 1 de 1

Xailer cria EXE com funções em duplicidade

Publicado: Mar Ago 24, 2021 6:31 pm
por Hurricane
boa tarde,

Percebi que o programador copiou sem perceber, a mesma função para 2 arquivos PRG, gerou o EXE normalmente e sem nenhum aviso.
Como impedir o Xailer de fazer isso?

Anexei um exemplo que demonstra.
Xailer 7/Mingw

Re: Xailer cria EXE com funções em duplicidade

Publicado: Mié Ago 25, 2021 10:22 am
por ignacio
Buenos días,

Intento traducir su mensaje:
Noté que el programador copió sin darme cuenta, la misma función para 2 archivos PRG, generó el EXE normalmente y sin previo aviso.
¿Cómo evitar que el chal haga esto?
Pero sigo sin entender del todo la pregunta. No obstante, si se refiere al hecho que pueda existir una función con el mismo nombre en distintos PRGs, me temo que no es un problema que pueda resolver Xailer. Debería enviar un aviso en enlazador. Es posible que haya un 'flag' para ello en MinGW, pero lo desconozco.

Un saludo

Re: Xailer cria EXE com funções em duplicidade

Publicado: Mié Ago 25, 2021 2:42 pm
por Hurricane
bom dia Ignacio,

entendo que você não conheça o flag do MinGW, porém é necessário tentar encontrar (o Xailer não pode gerar o EXE), e um bom caminho para isso é você analisar as saídas do hbmk2.exe.
Se eu tiver tempo, tentarei ajudá-lo se ainda precisar.

O título diz tudo :D, traduzido pelo google:
Shawl creates EXE with duplicate functions
ignacio escribió: Mié Ago 25, 2021 10:22 am Pero sigo sin entender del todo la pregunta. No obstante, si se refiere al hecho que pueda existir una función con el mismo nombre en distintos PRGs, me temo que no es un problema que pueda resolver Xailer. Debería enviar un aviso en enlazador. Es posible que haya un 'flag' para ello en MinGW, pero lo desconozco.

Re: Xailer cria EXE com funções em duplicidade

Publicado: Mar Ago 31, 2021 12:17 pm
por jfgimenez
Hola,

el motivo por el que se permite introducir dos nombres de función idénticas es para poder sobrecargar las clases T de Xailer (https://info.xailer.com/es/?p=21)

Re: Xailer cria EXE com funções em duplicidade

Publicado: Mié Oct 27, 2021 2:58 pm
por Hurricane
bom dia,

até o momento não temos nenhuma resposta sobre uma futura solução ao problema com o Xailer.
Por favor, pelo menos nos dê uma alternativa para nós alterarmos e desativarmos isso no Linker. Dando mais segurança e qualidade ao criar arquivos EXE.

É uma situação (extremamente inesperada e desastrosa) que acontece apenas com Xailer. O padrão de qualquer compilação console ou GUI para Harbour ou xHarbour: não permitir funções em duplicidade.
Pelo resposta do José, parece que foi intencional por vocês acharem que seria necessário para sobrecargas das classes T<****> FROM X<****>, mas não é.
jfgimenez escribió: Mar Ago 31, 2021 12:17 pm el motivo por el que se permite introducir dos nombres de función idénticas es para poder sobrecargar las clases T de Xailer (https://info.xailer.com/es/?p=21)

Re: Xailer cria EXE com funções em duplicidade

Publicado: Jue Oct 28, 2021 1:37 pm
por jfgimenez
Buenos días,

SÍ es necesario para sobrecargar clases T. Si no usáramos este flag, sería imposible hacer estas sobrecargas, y créeme, es una característica muy importante de Xailer. En otros GUIs xbase, cuando un usuario quiere cambiar algo del GUI, no tiene más remedio que hacer una copia del fuente de la clase correspondiente y hacer ahí sus modificaciones. Posteriormente, cuando sale una nueva versión tiene que volver a hacer el mismo proceso; y esto se repite una y otra vez, con el consiguiente problema de tiempo, esfuerzo y posibilidad de errores. En Xailer basta con sobrecagar la clase T añadiendo o modificando lo que necesite, y cuando sale una nueva versión de Xailer no hay que hacer nada... todo sigue funcionando correctamente.

Como comprenderás, no estamos dispuestos a renunciar a esta enorme ventaja por un problema puntual que hayas podido tener. Después de 18 años con Xailer creo que se ha demostrado con bastante claridad que esta característica es una solución muy acertada al problema que se pretendía corregir. En todos estos años nunca ha tenido nadie ningún inconveniente. Al revés, todo han sido ventajas.

Estoy seguro de que el problema que puedas tener se puede resolver de otra forma, no así. No obstante, si estás convencido de que esa es la solución y quieres probarlo, puedes crear un plugin que intercepte el evento "PR_PreLink". Este evento recibe los parámetros ( @cCmdLine, cWorkingDir, @cLinkScript ), y puedes modificar tanto la línea de comandos como el script de enlazado. Prueba a quitar el flag "-allow-multiple-definition" con un simple cLinkScript := StrTran( cLinkScript, "-allow-multiple-definition", "" ).

Por cierto, cuando usábamos BCC, no había ninguna necesidad de usar este flag. De hecho ni siquiera existía. BCC siempre ha permitido duplicar símbolos.

Re: Xailer cria EXE com funções em duplicidade

Publicado: Jue Dic 02, 2021 12:25 am
por Hurricane
boa noite José,

Obrigado por responder. Eu criei o plugin para usar PR_PreLink, e funciona bem. Removi as várias funções em duplicidade nos PRGs, usarei em momentos específicos.
Uso de forma improvisada, pois para gerar o EXE em Xailer, esta sendo obrigatório -allow-multiple-definition.
compile.png
compile.png (13.51 KiB) Visto 2684 veces
Como informei e com exemplo, é possível fazer a sobrecarga normalmente de uma função ou classe CLASS T* FROM X* existente na LIB, não depende de nenhum parâmetro especial do Linker.
xHarbour e Harbour também possui mecanismo (em tempo de execução) para fazer sobrecarga de métodos de classes (não da classe), mas acho CLASS T* FROM X* mais eficiente, versátil e limpo.

>>Después de 18 años con Xailer creo...
Uma coisa não tem nada haver com outra, entenda que cada programador tem sua forma de trabalhar, de analisar, seus princípios... não devemos gerar EXE com funções em duplicidade, regra tão antiga e útil.
jfgimenez escribió: Jue Oct 28, 2021 1:37 pm Buenos días,

SÍ es necesario para sobrecargar clases T. Si no usáramos este flag, sería imposible hacer estas sobrecargas, y créeme, es una característica muy importante de Xailer. En otros GUIs xbase, cuando un usuario quiere cambiar algo del GUI, no tiene más remedio que hacer una copia del fuente de la clase correspondiente y hacer ahí sus modificaciones. Posteriormente, cuando sale una nueva versión tiene que volver a hacer el mismo proceso; y esto se repite una y otra vez, con el consiguiente problema de tiempo, esfuerzo y posibilidad de errores. En Xailer basta con sobrecagar la clase T añadiendo o modificando lo que necesite, y cuando sale una nueva versión de Xailer no hay que hacer nada... todo sigue funcionando correctamente.

Como comprenderás, no estamos dispuestos a renunciar a esta enorme ventaja por un problema puntual que hayas podido tener. Después de 18 años con Xailer creo que se ha demostrado con bastante claridad que esta característica es una solución muy acertada al problema que se pretendía corregir. En todos estos años nunca ha tenido nadie ningún inconveniente. Al revés, todo han sido ventajas.

Estoy seguro de que el problema que puedas tener se puede resolver de otra forma, no así. No obstante, si estás convencido de que esa es la solución y quieres probarlo, puedes crear un plugin que intercepte el evento "PR_PreLink". Este evento recibe los parámetros ( @cCmdLine, cWorkingDir, @cLinkScript ), y puedes modificar tanto la línea de comandos como el script de enlazado. Prueba a quitar el flag "-allow-multiple-definition" con un simple cLinkScript := StrTran( cLinkScript, "-allow-multiple-definition", "" ).

Por cierto, cuando usábamos BCC, no había ninguna necesidad de usar este flag. De hecho ni siquiera existía. BCC siempre ha permitido duplicar símbolos.