Página 1 de 1

Erro de Execução

Enviado: 16 Nov 2011 13:42
por prodac
Boa tarde Amigos !!! O fonte abaixo refere-se á uma rotina de consulta de endereço pelo CEP. O programa compila certinho, mas está dando erro de execução. Alguém pode me ajudar à solucionar ?

Código: Selecionar todos

#include	"hbgtinfo.ch"
REQUEST	HB_LANG_PT
PROCEDURE MAIN()
	ConfigurarAmbiente()	
	DesenharTela()	
	ConsultarCEP()	
RETURN
/*** * * * * *
DesenharTela
*/
PROCEDURE ConsultarCEP
	LOCAL GetList := {}
	LOCAL oHttp, cXML, cCep
	LOCAL cRes, cResTxt, cUf, cCidade, cTipo, cEnde, cBairro
	DO WHILE .T.		
	      cCep := Space(9)		
	      @ 06, 05 SAY "Digite o CEP a ser consultado:" GET cCep PICTURE "99999-999"
	      READ
		
	      IF LastKey() == 27; EXIT; ENDIF

	      cCep := StrTran(AllTrim(cCep),"-","")
	      IF Len(cCep) != 8; LOOP; ENDIF
		
	      oHttp:= TIpClientHttp():new( "http://cep.republicavirtual.com.br/web_cep.php?cep="+cCep+"&formato=xml" )
	      IF ! oHttp:open()
	          Alert( "Erro na conexao: "+ oHttp:lastErrorMessage() )
	          LOOP
	      ENDIF
		
	      @ 08, 05 CLEAR TO MaxRow()-3, MaxCol()
	      @ 08, 05 SAY "=> Requisicao em andamento..." color "g/w"
    	      cXML := oHttp:readAll()
      	      oHttp:close()
   	      @ 08, 05 CLEAR TO MaxRow()-3, MaxCol()
   	
   	      IF Empty(cXML)
   	         @ 09, 05 SAY "Ocorreu um erro inesperado. Tente outro CEP..." COLOR "r/w"
   	         LOOP
    	      ENDIF   		
   	
   	      cRes 		:= Substr( cXML, At("<resultado>",cXML)+11, At("</resultado>",cXML)-At("<resultado>",cXML)-11 )
   	      cResTxt	:= Substr( cXML, At("<resultado_txt>",cXML)+15, At("</resultado_txt>",cXML)-At("<resultado_txt>",cXML)-15 )
   	      cUf 		:= Substr( cXML, At("<uf>",cXML)+4, At("</uf>",cXML)-At("<uf>",cXML)-4 )
   	      cCidade	:= Substr( cXML, At("<cidade>",cXML)+8, At("</cidade>",cXML)-At("<cidade>",cXML)-8 )
   	      cTipo		:= Substr( cXML, At("<tipo_logradouro>",cXML)+17, At("</tipo_logradouro>",cXML)-At("<tipo_logradouro>",cXML)-17 )
   	      cEnde		:= Substr( cXML, At("<logradouro>",cXML)+12, At("</logradouro>",cXML)-At("<logradouro>",cXML)-12 )
   	      cBairro	:= Substr( cXML, At("<bairro>",cXML)+8, At("</bairro>",cXML)-At("<bairro>",cXML)-8 )   	
   	
   	      IF cRes == "1"
   	         @ 08, 05 SAY "Resposta do servidor.: " ; 	@ Row(), Col() SAY HB_ANSITOOEM( cResTxt ) COLOR "g/w"
   	      ELSE
   	         @ 08, 05 SAY "Resposta do servidor.: " ; 	@ Row(), Col() SAY HB_ANSITOOEM( cResTxt ) COLOR "r/w"
   	      ENDIF   	
   	
   	      @ 10, 05 SAY "Tipo de logradouro...: " ; 	@ Row(), Col() SAY HB_ANSITOOEM( cTipo ) COLOR "n+/w"
   	      @ 11, 05 SAY "Logradouro...........: " ; 	@ Row(), Col() SAY HB_ANSITOOEM( cEnde ) COLOR "n+/w"
   	      @ 12, 05 SAY "Bairro...............: " ; 	@ Row(), Col() SAY HB_ANSITOOEM( cBairro ) COLOR "n+/w"
   	      @ 13, 05 SAY "Cidade...............: " ; 	@ Row(), Col() SAY HB_ANSITOOEM( cCidade ) COLOR "n+/w"
    	      @ 14, 05 SAY "UF...................: " ; 	@ Row(), Col() SAY cUf COLOR "n+/w"   	
	ENDDO
RETURN

/*** * * * * *
DesenharTela
*/
PROCEDURE DesenharTela
	SetColor("0/7,0/15")
	Scroll()
	@ 02, 04 SAY "CONSULTA DE CEP VIA WEBSERVICE COM HARBOUR" COLOR "r/w"
	@ 03, 03 TO 03, 46 COLOR "r/w"
	@ MaxRow()-1, MaxCol()-25 say "stanis.luksys@gmail.com"
RETURN


/********** * * * * *
ConfigurarAmbiente()
*/
PROCEDURE ConfigurarAmbiente()
	Hb_LangSelect( 'PT' )	
	wvw_SetCodePage( 0, 255 )
	wvw_SetTitle( 0, "Harbour - Consulta de CEP via webservice" )
	wvw_Size_Ready( .t. )
*	wvw_EnableMaximize( 0, .t. )
	wvw_SetFont( 0 , "Consolas", 24, 11, 100, 4 )		
	SetMode( 20, 70 )
RETURN


/********** * * * * *
WVW_SIZE()
*/
function WVW_SIZE(nWinNum, hWnd, message, wParam, lParam)	
	LOCAL	c := SaveScreen( 0, 0, MaxRow(), MaxCol() )
	LOCAL aFonte := {}
	LOCAL nAlt, nLar
	
	IF wParam == 2
		for i:=1 to 20
			wvw_SetFont(0,"Consolas",i*2,i,100,4)
			if setmode( 20, 70 )
				aFonte := WVW_GETFONTINFO()
				nAlt := aFonte[2]
				nLar := aFonte[3]
			endif
		next
		wvw_SetFont(0,"Consolas",nAlt,nLar,100,4)
		for i:=1 to 10
			wvw_SetFont(0,"Consolas",nAlt+1,nLar,100,4)
			if setmode( 20, 70 )
				aFonte := WVW_GETFONTINFO()
				nAlt := aFonte[2]
				nLar := aFonte[3]
			endif
		next
		wvw_SetFont(0,"Consolas",nAlt,nLar,100,4)

		for i:=1 to 10
			wvw_SetFont(0,"Consolas",nAlt,nLar+i,100,4)
			if setmode( 20, 70 )
				aFonte := WVW_GETFONTINFO()
				nAlt := aFonte[2]
				nLar := aFonte[3]
			endif
		next
		wvw_SetFont( 0, "Consolas", nAlt, nLar, 100,4 )
		
	ELSEIF wParam == 0
		wvw_SetFont( 0 , "Consolas", 24, 11, 100, 4 )
	ENDIF
	RestScreen( 0, 0, 20, 70, c )
	
return

#pragma BEGINDUMP 
#include "hbapi.h" 

HB_FUNC( WVW_SIZE_READY ) 
{ 
BOOL bIsReady; 
static BOOL s_bIsReady = FALSE; 
bIsReady = s_bIsReady; 
if (ISLOG(1)) 
{ 
s_bIsReady = hb_parl(1); 
} 
hb_retl(bIsReady); 
} 
#pragma ENDDUMP
O erro dá exatamente no ponto do comendo - IF ! oHttp:open() (linha 26 do código)

Mensagem de erro:
Error BASE/1004: Class: `NIL` has no exported method: NPORT Arguments: ()

Erro de Execução

Enviado: 16 Nov 2011 15:18
por Pablo César
Eu não obtive erro algum, mas deixei enxuto e compile através da IDE da HMG. Olhe como ficou:

Código: Selecionar todos

Function Main()
DesenharTela()   
ConsultarCEP()   
RETURN

Function ConsultarCEP
   LOCAL GetList := {}
   LOCAL oHttp, cXML, cCep
   LOCAL cRes, cResTxt, cUf, cCidade, cTipo, cEnde, cBairro
   DO WHILE .T.      
      cCep := Space(9)      
      @ 06, 05 SAY "Digite o CEP a ser consultado:" GET cCep PICTURE "99999-999"
      READ
      IF LastKey() == 27
	     EXIT
      ENDIF
      cCep := StrTran(AllTrim(cCep),"-","")
      IF Len(cCep) != 8
	     LOOP
      ENDIF
      oHttp:= TIpClientHttp():new( "http://cep.republicavirtual.com.br/web_cep.php?cep="+cCep+"&formato=xml" )
      IF ! oHttp:open()
         Alert( "Erro na conexao: "+ oHttp:lastErrorMessage() )
         LOOP
      ENDIF
      @ 08, 05 CLEAR TO MaxRow()-3, MaxCol()
      @ 08, 05 SAY "=> Requisicao em andamento..." color "g/w"
      cXML := oHttp:readAll()
      oHttp:close()
      @ 08, 05 CLEAR TO MaxRow()-3, MaxCol()
      IF Empty(cXML)
         @ 09, 05 SAY "Ocorreu um erro inesperado. Tente outro CEP..." COLOR "r/w"
         LOOP
      ENDIF         
      cRes    := Substr( cXML, At("<resultado>",cXML)+11, At("</resultado>",cXML)-At("<resultado>",cXML)-11)
      cResTxt := Substr( cXML, At("<resultado_txt>",cXML)+15, At("</resultado_txt>",cXML)-At("<resultado_txt>",cXML)-15) 
      cUf     := Substr( cXML, At("<uf>",cXML)+4, At("</uf>",cXML)-At("<uf>",cXML)-4 )
      cCidade := Substr( cXML, At("<cidade>",cXML)+8, At("</cidade>",cXML)-At("<cidade>",cXML)-8 )
      cBairro := Substr( cXML, At("<bairro>",cXML)+8, At("</bairro>",cXML)-At("<bairro>",cXML)-8 )
      cTipo   := Substr( cXML, At("<tipo_logradouro>",cXML)+17, At("</tipo_logradouro>",cXML)-At("<tipo_logradouro>",cXML)-17 )
      cEnde   := Substr( cXML, At("<logradouro>",cXML)+12, At("</logradouro>",cXML)-At("<logradouro>",cXML)-12 )
      IF cRes == "1"
         @ 08, 05 SAY "Resposta do servidor.: " + HB_ANSITOOEM( cResTxt ) COLOR "g/w"
      ELSE
         @ 08, 05 SAY "Resposta do servidor.: " + HB_ANSITOOEM( cResTxt ) COLOR "r/w"
      ENDIF      
      @ 10, 05 SAY "Tipo de logradouro...: " ;    @ Row(), Col() SAY HB_ANSITOOEM( cTipo ) COLOR "n+/w"
      @ 11, 05 SAY "Logradouro...........: " ;    @ Row(), Col() SAY HB_ANSITOOEM( cEnde ) COLOR "n+/w"
      @ 12, 05 SAY "Bairro...............: " ;    @ Row(), Col() SAY HB_ANSITOOEM( cBairro ) COLOR "n+/w"
      @ 13, 05 SAY "Cidade...............: " ;    @ Row(), Col() SAY HB_ANSITOOEM( cCidade ) COLOR "n+/w"
      @ 14, 05 SAY "UF...................: " ;    @ Row(), Col() SAY cUf COLOR "n+/w"     
   ENDDO
RETURN

Function DesenharTela
   SetMode(25,80)
   SetColor("0/7,0/15")
   Scroll()
   @ 02, 04 SAY "CONSULTA DE CEP VIA WEBSERVICE COM HARBOUR" COLOR "r/w"
   @ 03, 03 TO 03, 46 COLOR "r/w"
   @ MaxRow()-1, MaxCol()-25 say "stanis.luksys@gmail.com"
RETURN
Olha como ficou:
Imagem
Anexei o arquivo executável para que você teste aí.

Erro de Execução

Enviado: 16 Nov 2011 16:23
por prodac
Obrigado Pablo.... Vou testar por aqui.... Se precisar peço novo HELP.

Valeu mesmo....

Erro de Execução

Enviado: 16 Nov 2011 16:43
por prodac
Pablo. Show de Bola. Agora uma outra coisa... Preciso compilar esta rotina junto de meus sistemas na versão Linux. O que deve ser alterado ? Que bibliotecas devo compilar junto ?

Para compilar em linux uso um script que Vagucs desenvolveu para minha empresa....

Pode me ajudar nessa?

Erro de Execução

Enviado: 16 Nov 2011 17:58
por Pablo César
Lamentávelmente nunca desenvolví algo para Linux. Ja tive contacto há muitos anos com Linux, mas como não tenho instalado, o meu interesse por enquanto é quase zero. Desculpe nessa vou ficar devendo. Eu gosto de trabalhar com Harbour / MiniGui. Mas sei que tem o Marinas que tem para Linux também. O HMG 4 promete ter a versão em Linux, mas ainda está gatinhando...