Jump to content
Fivewin Brasil

Gerar exe apesar dos "unresolved externals"


coiote

Recommended Posts

Olá colegas

Existiria no Harbour uma cláusula semelhante ao

BLINKER EXECUTABLE NODELETE

que gera o exe apesar de um "unresolved external" como, por exemplo, na falta de um dos módulos compilados com /m no programa abaixo?

Calc.prg:

---------

Function Main()

Cliente := "JOAO"

If Cliente = "JOAO"

Soma(1, 1)

ElseIf Cliente = "MARIA"

Subtrai(1, 1) // Este prg nao consta em Joao.lnk

Endif // Como gero o exe apesar do

Return Nil // unresolved external?

Soma.prg:

---------

Proc Soma(A,B)

Return A+B

Joao.lnk:

-----------

Calc

Soma

Estou compilando assim:

compila @Joao

Compila.bat (parte dele)

-----------

\Harbour\Bin\harbour @%1.lnk -m -n -q0 -i%HB_INC_INSTALL% %2 %3 %HARBOURFLAGS%

Rem Arquitetura w32:

bcc32 -O2 -d %CFLAGS% -I%HB_INC_INSTALL% -L%HB_LIB_INSTALL% %1.c %HB_USER_LIBS% hbcpage.lib hbdebug.lib hbvm.lib hbrtl.lib gtwin.lib hblang.lib hbrdd.lib hbmacro.lib hbpp.lib rddfpt.lib rddntx.lib rddcdx.lib hbhsx.lib hbsix.lib hbcommon.lib hbpcre.lib hbzlib.lib

Link to comment
Share on other sites

Olá colegas

Existiria no Harbour uma cláusula semelhante ao

BLINKER EXECUTABLE NODELETE

que gera o exe apesar de um "unresolved external" como, por exemplo, na falta de um dos módulos compilados com /m no programa abaixo?

Calc.prg:

---------

Function Main()

Cliente := "JOAO"

If Cliente = "JOAO"

Soma(1, 1)

ElseIf Cliente = "MARIA"

Subtrai(1, 1) // Este prg nao consta em Joao.lnk

Endif // Como gero o exe apesar do

Return Nil // unresolved external?

Soma.prg:

---------

Proc Soma(A,B)

Return A+B

Joao.lnk:

-----------

Calc

Soma

Estou compilando assim:

compila @Joao

Compila.bat (parte dele)

-----------

\Harbour\Bin\harbour @%1.lnk -m -n -q0 -i%HB_INC_INSTALL% %2 %3 %HARBOURFLAGS%

Rem Arquitetura w32:

bcc32 -O2 -d %CFLAGS% -I%HB_INC_INSTALL% -L%HB_LIB_INSTALL% %1.c %HB_USER_LIBS% hbcpage.lib hbdebug.lib hbvm.lib hbrtl.lib gtwin.lib hblang.lib hbrdd.lib hbmacro.lib hbpp.lib rddfpt.lib rddntx.lib rddcdx.lib hbhsx.lib hbsix.lib hbcommon.lib hbpcre.lib hbzlib.lib

Link to comment
Share on other sites

Boa tarde.

Senão me engano no seu .PRG principal, vc tem que declarar a função como DYNAMIC... este comando é igual ao REQUEST do Clipper. Seria algo como:


REQUEST descend

DYNAMIC subtrai

Function Main()

Cliente := "JOAO"

If Cliente = "JOAO"

Soma(1, 1)

ElseIf Cliente = "MARIA"

Subtrai(1, 1) // Este prg nao consta em Joao.lnk

Endif // Como gero o exe apesar do

Return Nil // unresolved external?

id=code>id=code>

Espero que ajude. Qqer coisa posta msg aê pra nós.

assinatura.jpg

Link to comment
Share on other sites

Olá!

Segundo o changelog do Harbour, este recurso existe desde Março de 2007 e o comando é DYNAMIC mesmo. Veja os detalhes:


added support for DYNAMIC function declaration - it allow to define

functions which are lately bound at runtime, f.e.:

/*** t01.prg ***/

dynamic func1

proc main()

local h:=__hrbload("t02.hrb")

? func1()

return

/*** t02.prg ***/

func func1

return "Hello!!!"

id=code>id=code>

assinatura.jpg

Editado por - vailtom on 06/11/2009 18:39:41

Link to comment
Share on other sites

Amigos,

Pelas respostas de vocês vejo que no Harbour sou obrigado a declarar todos os prg que fazem parte do projeto. Seja com Dynamic, seja com Include. Concluo que não é possível gerar o exe se meu sistema tem alguma linha que chame um outro prg que ainda não esteja escrito. Eu esperava que ele fizesse como no clipper: informar a inexistência daquele modulo (que no meu sistema são muitos) após a linkedição e apresentar o erro "undefined function" quando o usuário tentasse executar a opção corresondente ao módulo inexistente.

Talvêz vocês perguntem por que pretendo fazer assim. É simples: eu faço um esqueleto só para todos os clientes e, para uns, habilito algumas opções do menu e para outros não.

Cada cliente meu tem pelo menos 20 módulos que não se aplicam a eles.

A solução que vejo para isso é linkar um prg contendo estas funções e deixá-las sem conteúdo assim:

Function subtrai

Return Nil

Isto permitiria gerar um executável mais enxuto o que é melhor que incluir funções que eles não precisam.

Alguém tem uma idéia melhor? Ou existe um Blinker para 32 bits?

Link to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Loading...
×
×
  • Create New...