coiote Posted November 5, 2009 Report Share Posted November 5, 2009 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, 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 Quote Link to comment Share on other sites More sharing options...
coiote Posted November 5, 2009 Author Report Share Posted November 5, 2009 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, 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 Quote Link to comment Share on other sites More sharing options...
vailtom Posted November 5, 2009 Report Share Posted November 5, 2009 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. Quote Link to comment Share on other sites More sharing options...
coiote Posted November 5, 2009 Author Report Share Posted November 5, 2009 Isto deu o seguinte erro: Error E0030 Syntax error: "syntax error at 'SUBTRAI'" Quote Link to comment Share on other sites More sharing options...
Luiz Arruda (ICO) Posted November 5, 2009 Report Share Posted November 5, 2009 Tente assim; Activate Window ownd ... Return(Nil) #Include "SubTrai.PRG"id=code>id=code>Veja se dá certo.. Abraços.. Luiz Arruda - Corumba(MS) FiveWin 9.04 [x]Harbour xDev WS -- ico.corumba@gmail.com -- Não Abandone Seu Tópicoid=red> Quote Link to comment Share on other sites More sharing options...
vailtom Posted November 5, 2009 Report Share Posted November 5, 2009 qual a versao do harbour em uso? E e harbour ou xharbour??? Quote Link to comment Share on other sites More sharing options...
coiote Posted November 5, 2009 Author Report Share Posted November 5, 2009 Minha versão é Harbour Alfa 1.0.1 Quote Link to comment Share on other sites More sharing options...
vailtom Posted November 5, 2009 Report Share Posted November 5, 2009 qual a revisao? Vou baixar e ver se nesta versao tinha este recurso.... Quote Link to comment Share on other sites More sharing options...
vailtom Posted November 6, 2009 Report Share Posted November 6, 2009 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> Editado por - vailtom on 06/11/2009 18:39:41 Quote Link to comment Share on other sites More sharing options...
coiote Posted November 7, 2009 Author Report Share Posted November 7, 2009 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? Quote Link to comment Share on other sites More sharing options...
Recommended Posts
Join the conversation
You can post now and register later. If you have an account, sign in now to post with your account.