Jump to content
Fivewin Brasil

qiinfo

Membros
  • Posts

    938
  • Joined

  • Last visited

  • Days Won

    3

Everything posted by qiinfo

  1. Olá, Não estou conseguindo gerar a rddads.lib para harbour + bcc55, está me gerando estes erros de compilação: Borland Resource Compiler Version 5.40 Copyright © 1990, 1999 Inprise Corporation. All rights reserved. Turbo Incremental Link 5.00 Copyright © 1997, 2000 Borland Error: Unresolved external '_HB_FUN_ADS' Error: Unresolved external '_hb_adsCloseCursor' FUNC.OBJ Error: Unresolved external '_hb_adsGetWorkAreaPointer' id=code>id=code>Alguém sabe gerar esta lib ? Rossine FW 2.2c + @say + Clipper 5.2e + libs 5.3b / FWH 8.09 + @say + xHarbour Divinópolis/ MG
  2. Olá, Não estou conseguindo gerar a rddads.lib para harbour + bcc55, está me gerando estes erros de compilação: Borland Resource Compiler Version 5.40 Copyright © 1990, 1999 Inprise Corporation. All rights reserved. Turbo Incremental Link 5.00 Copyright © 1997, 2000 Borland Error: Unresolved external '_HB_FUN_ADS' Error: Unresolved external '_hb_adsCloseCursor' FUNC.OBJ Error: Unresolved external '_hb_adsGetWorkAreaPointer' id=code>id=code>Alguém sabe gerar esta lib ? Rossine FW 2.2c + @say + Clipper 5.2e + libs 5.3b / FWH 8.09 + @say + xHarbour Divinópolis/ MG
  3. Olá Vitor, Boa pergunta, também estou precisando ver isto. Gilmer você saberia nos dizer como proceder neste caso ? Rossine FW 2.2c + @say + Clipper 5.2e + libs 5.3b / FWH 8.09 + @say + xHarbour Divinópolis/ MG
  4. Opa, me incluam nesta lista de agradecimento Como os amigos disseram, sem a solução e o suporte do Gilmer sobre o assunto, seria muito complicado. Montei minha aplicação sem ao menos saber o que era preciso e como fazer. Ontem começou pra valer e foi tudo 100% Eu recomendo para quem tiver que desenvolver a NF-e e não quiser ter nenhum tipo de aborrecimento ou ter que ficar correndo atrás para saber como funciona ou o que é necessário fazer, aí está a solução. Podem comprar que vale a pena mesmo. Obrigado Gilmer pela solução, suporte e paciência Abraços, Rossine FW 2.2c + @say + Clipper 5.2e + libs 5.3b / FWH 8.09 + @say + xHarbour Divinópolis/ MG
  5. Olá Lailton, A chamada a função abaixo: oBio:OnStatus := { |event, data| OnStatus( event, data ) } tem que ser "comentada". Mesmo no meu exemplo que está em dicas dá o erro de GPF , desde que esta função seja usada. Tirando ela , o resto funciona beleza. Outro detalhe que gerava o GPF era esta função: oBio:OnImage := {|idSensor, width, height, rawImage, res| OnImage( idSensor, width, height, rawImage, res ) } Dentro da função OnImage você não pode colocar nada, por que senão dá erro de GPF. A única coisa que precisa estar lá é a ativação de um timer para poder chamar a sua função, como mostro abaixo: *********************** static FUNCTION OnImage(idSensor, cTemplate, rawImage, width, height, res ) *********************** aInfoImg := { idSensor, cTemplate, rawImage, width, height, res } oTimerImg:Activate() return .T. ************************* static function CAP_IMAGE ************************* ... Veja dentro do demo.prg como ele foi montado. O interessante tambem que ele seja testado em máquinas diferentes. Abraços, id=code>id=code>O que eu percebi que estava gerando o GPF era isto. Rossine FW 2.2c + @say + Clipper 5.2e + libs 5.3b / FWH 8.09 + @say + xHarbour Divinópolis/ MG
  6. Olá Pessoal, Fiz algumas modificações / implementações na classe do Vailton porque estavam ocorrendo erros aqui pra mim de GPF e hb_vmdo(). Com estas mudanças eles não ocorreram mais. Postei em dicas para vocês testarem e me falarem se funcionou legal aí pra vocês ok ? Ela foi testada com xharbour comercial e harbour + msvc. Dúvidas, sugestões, favor postar aqui neste forum, Obrigado, Rossine. Rossine FW 2.2c + @say + Clipper 5.2e + libs 5.3b / FWH 8.09 + @say + xHarbour Divinópolis/ MG
  7. Olá Pessoal, Fiz algumas modificações / implementações na classe do Vailton porque estavam ocorrendo erros aqui pra mim de GPF e hb_vmdo(). Com estas mudanças eles não ocorreram mais. Postei em dicas para vocês testarem e me falarem se funcionou legal aí pra vocês ok ? Ela foi testada com xharbour comercial e harbour + msvc. Dúvidas, sugestões, favor postar aqui neste forum, Obrigado, Rossine. Rossine FW 2.2c + @say + Clipper 5.2e + libs 5.3b / FWH 8.09 + @say + xHarbour Divinópolis/ MG
  8. Olá Pessoal, Eu estou usando a solução do Gilmer e estou super satisfeito, tanto com o programa quanto ao suporte. O meu serviço foi 100% braçal e gastei 3 dias fazendo ajustes em meu sistema para colocar rodando. Fica aqui meu depoimento. Obrigado Gilmer, Rossine FW 2.2c + @say + Clipper 5.2e + libs 5.3b / FWH 8.09 + @say + xHarbour Divinópolis/ MG
  9. Olá Leandro, Veja este exemplo que montei: #include "fivewin.ch" function MAIN local lFoco := .T. && Execute primeiro como .T. e depois mude para .F. local oWnd if IsExeRunning( cfilename( hb_argv(0) ) ) if lFoco SAIDA_SYS(1) else sysrefresh() msgalert( "O programa já está carregado na Memória..." + CRLF + CRLF + "Impossível executá-lo novamente !!!", "Atenção" ) SAIDA_SYS(2) endif endif define window oWnd pixel title "Teste de Execução" activate window oWnd maximized return NIL ****************** function SAIDA_SYS( nNivel ) ****************** if pcount() = 0 nNivel := 0 endif set resources to if nNivel = 1 ShowApplication( "Teste de Execução" ) nNivel := 1 endif PostQuitMessage( 0 ) __quit() return NIL ************************ function ShowApplication( cAplication ) ************************ local hWnd, aTasks := GetTasks1() hWnd := ascan( aTasks, { |aTask| at( cAplication, aTask[1] ) > 0 } ) if hWnd > 0 hWnd := aTasks[hWnd,2] showwindow( hWnd, 0 ) showwindow( hWnd, 6 ) showwindow( hWnd, 9 ) showwindow( hWnd, 3 ) sysrefresh() setfocus( hWnd ) endif return iif( hWnd = 0, .F., .T. ) // Returns an array with the names of all the active Tasks running in Windows #include "FiveWin.ch" #define GHW_HWNDFIRST 0 #define GHW_HWNDNEXT 2 #define GWW_HINSTANCE -6 #define GW_CHILD 5 #define GW_HWNDNEXT 2 //----------------------------------------------------------------------------// function GetTasks1() local hWnd := GetWindow( GetDesktopWindow(), GW_CHILD ) && GetActiveWindow() GHW_HWNDFIRST local aTasks := {} local cTask while hWnd != 0 #ifdef __CLIPPER__ cTask = GetModuleFileName( GetWindowWord( hWnd, GWW_HINSTANCE ) ) #else // cTask = GetModuleFileName( GetWindowLong( hWnd, GWW_HINSTANCE ) ) cTask = GetWindowText( hWnd ) // The above does now work :-( #endif if AScan( aTasks, { |aCampo| aCampo[1] == cTask } ) == 0 AAdd( aTasks, { cTask, hWnd } ) endif hWnd = GetWindow( hWnd, GHW_HWNDNEXT ) end return aTasks //----------------------------------------------------------------------------// id=code>id=code>Para ver ele funcionando, chame o programa, deixe ele executando na memória e depois chame novamente. Quando você estiver executando o programa compilado com a variavel lFoco setada para <.T.>, o segundo programa será terminado e o foco para o primeiro. Já quando a variável lFoco estiver setada para <.F.>, o programa será finalizado sem dar o foco na primeira aplicação. Abraços, Rossine FW 2.2c + @say + Clipper 5.2e + libs 5.3b / FWH 8.09 + @say + xHarbour Divinópolis/ MG
  10. Olá pessoal, De onde baixo este emissor ? Vocês tem um exemplo de como comunicar com ele ? Obrigado, Editado por - qiinfo on 15/01/2009 10:14:16
  11. Olá Samir, Veja se este exemplo faz o que voce quer: // Programa para mudar o "STYLE" do objeto em tempo de execução #include 'FIVEWIN.CH' PROCEDURE Main() local oFont, oDlg, obtn1, OBTN2, cvar1 := space(20), cvar2 := space(20) define font oFont name 'MS Sans Serif' size 6,15 define dialog oDlg from 0,0 to 15,50 font oFont title 'Test Button on Dialog' @ 1, 3 get cVar1 @ 2, 3 get cVar2 @ 3, 3 BUTTON obtn1 prompt "&Botao sem foco" size 100,20 font oFont OF oDlg ACTION MsgInfo("Botao sem foco") oBtn1:nStyle := nAnd( oBtn1:nStyle, nNot( WS_TABSTOP ) ) @ 5, 3 BUTTON obtn2 prompt "&Botao com foco" size 100,20 font oFont OF oDlg ACTION MUDA_TAB( oDlg, oBtn2 ) activate dialog oDlg centered return #define GWL_STYLE -16 function MUDA_TAB( oDlg, oObj ) if lAnd( GetWindowLong( oObj:hWnd, GWL_STYLE ), WS_TABSTOP ) oObj:nStyle := nAnd( oObj:nStyle, nNot( WS_TABSTOP ) ) oobj:settext( "Botao sem foco" ) else oObj:nStyle := nOr( oObj:nStyle, WS_TABSTOP ) oobj:settext( "Botao com foco" ) endif SetWindowLong( oObj:hWnd, GWL_STYLE, oObj:nStyle ) oDlg:setfocus() oObj:setfocus() return NIL id=code>id=code>Abraços, Editado por - qiinfo on 13/01/2009 09:12:02
  12. Olá Samir, Veja se assim resolve: oBtn:nStyle := nAnd( oBtn:nStyle, nNot( WS_TABSTOP ) ) Detalhe, isto vale para qualquer objeto que você não queira que ele receba foco. Abraços, Rossine FW 2.2c + @say + Clipper 5.2e + libs 5.3b / FWH 8.09 + @say + xHarbour Divinópolis/ MG Editado por - qiinfo on 12/01/2009 17:04:54
  13. Olá pessoal, Ainda não consegui mudar os skins (edita-los). Olhem como estou tentando fazer: 1) Abro a AppFace UI Development kits 2) clico em skin editor 3) aparece a tela o "skinTool" Aí tento as opcoes de "open" e "import" e todas as duas me pedem o arquivo ".upr" sendo que só tenho os arquivos ".urf" O que estou fazendo errado ? Obrigado, Rossine FW 2.2c + @say + Clipper 5.2e + libs 5.3b / FWH 8.09 + @say + xHarbour Divinópolis/ MG
  14. Olá, Eu só consigo usar os arquivos .urf que vieram no exemplo, outros que baixei não funcionam, porque ? Alessandro, qual programa posso usar para mudar os skins ? Obrigado, Rossine FW 2.2c + @say + Clipper 5.2e + libs 5.3b / FWH 8.09 + @say + xHarbour Divinópolis/ MG
  15. Olá, Não estou conseguindo fazer o debugador funcionar com o xharbour comercial. Alguém conseguiu ? Obrigado, Rossine FW 2.2c + @say + Clipper 5.2e + libs 5.3b / FWH 8.09 + @say + xHarbour Divinópolis/ MG
  16. Olá Pessoal, a função: oDlg:saveToBmp() sempre me retorna um .BMP inválido, nenhum programa consegue mostrar ele, será porque ? Obrigado, Rossine FW 2.2c + @say + Clipper 5.2e + libs 5.3b / FWH 8.09 + @say + xHarbour Divinópolis/ MG
  17. ...ou se preferirem, incluão somente isto dentro de ERRSYSW.PRG. citação:************************ init procedure TRATA_GPF ************************ SetUnhandledExceptionFilter( @GpfHandler() ) return NIL #include "hbexcept.ch" ******************* Function GpfHandler( Exception ) ******************* local cMsg, nCode, oError ** TraceLog( "GPF:", Exception ) ** memowrit( "gpf.txt", valtoprg( Exception ) ) IF Exception <> NIL nCode := Exception:ExceptionRecord:ExceptionCode SWITCH nCode CASE EXCEPTION_ACCESS_VIOLATION cMsg := "EXCEPTION_ACCESS_VIOLATION - O thread tentou ler/escrever num endereço virtual ao qual não tinha acesso." EXIT CASE EXCEPTION_DATATYPE_MISALIGNMENT cMsg := "EXCEPTION_DATATYPE_MISALIGNMENT - O thread tentou ler/escrever dados desalinhados em hardware que não oferece alinhamento. Por exemplo, valores de 16 bits precisam ser alinhados em limites de 2 bytes; valores de 32 bits em limites de 4 bytes, etc. " EXIT CASE EXCEPTION_ARRAY_BOUNDS_EXCEEDED cMsg := "EXCEPTION_ARRAY_BOUNDS_EXCEEDED - O thread tentou acessar um elemento de array fora dos limites e o hardware possibilita a checagem de limites." EXIT CASE EXCEPTION_FLT_DENORMAL_OPERAND cMsg := "EXCEPTION_FLT_DENORMAL_OPERAND - Um dos operandos numa operação de ponto flutuante está desnormatizado. Um valor desnormatizado é um que seja pequeno demais para poder ser representado no formato de ponto flutuante padrão." EXIT CASE EXCEPTION_FLT_DIVIDE_BY_ZERO cMsg := "EXCEPTION_FLT_DIVIDE_BY_ZERO - O thread tentou dividir um valor em ponto flutuante por um divisor em ponto flutuante igual a zero." EXIT CASE EXCEPTION_FLT_INEXACT_RESULT cMsg := "EXCEPTION_FLT_INEXACT_RESULT - O resultado de uma operação de ponto flutuante não pode ser representado como uma fração decimal exata." EXIT CASE EXCEPTION_FLT_INVALID_OPERATION cMsg := "EXCEPTION_FLT_INVALID_OPERATION - Qualquer operação de ponto flutuante não incluída na lista." EXIT CASE EXCEPTION_FLT_OVERFLOW cMsg := "EXCEPTION_FLT_OVERFLOW - O expoente de uma operação de ponto flutuante é maior que a magnitude permitida pelo tipo correspondente." EXIT CASE EXCEPTION_FLT_STACK_CHECK cMsg := 'EXCEPTION_FLT_STACK_CHECK - A pilha ficou desalinhada ("estourou" ou "ficou abaixo") como resultado de uma operação de ponto flutuante.' EXIT CASE EXCEPTION_FLT_UNDERFLOW cMsg := "EXCEPTION_FLT_UNDERFLOW - O expoente de uma operação de ponto flutuante é menor que a magnitude permitida pelo tipo correspondente." EXIT CASE EXCEPTION_INT_DIVIDE_BY_ZERO cMsg := "EXCEPTION_INT_DIVIDE_BY_ZERO - O thread tentou dividir um valor inteiro por um divisor inteiro igual a zero." EXIT CASE EXCEPTION_INT_OVERFLOW cMsg := "EXCEPTION_INT_OVERFLOW - O resultado de uma operação com inteiros causou uma transposição (carry) além do bit mais significativo do resultado." EXIT CASE EXCEPTION_PRIV_INSTRUCTION cMsg := "EXCEPTION_PRIV_INSTRUCTION - O thread tentou executar uma instrução cuja operação não é permitida no modo de máquina atual." EXIT CASE EXCEPTION_IN_PAGE_ERROR cMsg := "EXCEPTION_IN_PAGE_ERROR - O thread tentou acessar uma página que não estava presente e o sistema não foi capaz de carregar a página. Esta exceção pode ocorrer, por exemplo, se uma conexão de rede é perdida durante a execução do programa via rede." EXIT CASE EXCEPTION_ILLEGAL_INSTRUCTION cMsg := "EXCEPTION_ILLEGAL_INSTRUCTION - O thread tentou executar uma instrução inválida." EXIT CASE EXCEPTION_NONCONTINUABLE_EXCEPTION cMsg := "EXCEPTION_NONCONTINUABLE_EXCEPTION - O thread tentou continuar a execução após a ocorrência de uma exceção irrecuperável." EXIT CASE EXCEPTION_STACK_OVERFLOW cMsg := "EXCEPTION_STACK_OVERFLOW - O thread esgotou sua pilha (estouro de pilha)." EXIT CASE EXCEPTION_INVALID_DISPOSITION cMsg := "EXCEPTION_INVALID_DISPOSITION - Um manipulador (handle) de exceções retornou uma disposição inválida para o tratador de exceções. Uma exceção deste tipo nunca deveria ser encontrada em linguagens de médio/alto nível." EXIT CASE EXCEPTION_GUARD_PAGE cMsg := "CASE EXCEPTION_GUARD_PAGE" EXIT CASE EXCEPTION_INVALID_HANDLE cMsg := "EXCEPTION_INVALID_HANDLE" EXIT CASE EXCEPTION_SINGLE_STEP cMsg := "EXCEPTION_SINGLE_STEP Um interceptador de passos ou outro mecanismo de instrução isolada sinalizou que uma instrução foi executada." EXIT CASE EXCEPTION_BREAKPOINT cMsg := "EXCEPTION_BREAKPOINT - Foi encontrado um ponto de parada (breakpoint)." EXIT DEFAULT cMsg := "UNKNOWN EXCEPTION (" + cStr( Exception:ExceptionRecord:ExceptionCode ) + ")" END ** IF cMsg <> NIL ** Tracelog( "GPF Intercepted!", cMsg ) ** Alert( "GPF Intercepted!" + CRLF + cMsg ) ** ENDIF ENDIF ** Throw( ErrorNew( "GPFHANDLER", 0, 0, ProcName(), "Erro de GPF", { cMsg, Exception, nCode }, Procfile(), Procname(), procline() ) ) oError := ErrorNew( "GPFHANDLER", 0, 0, ProcName(), "Erro de GPF", { cMsg, Exception, nCode }, Procfile(), Procname(), procline() ) ErrorDialog( oError ) RETURN EXCEPTION_EXECUTE_HANDLER id=quote>id=quote>Abraços, Rossine. Rossine FW 2.2c + @say + Clipper 5.2e + libs 5.3b / FWH 2.7 + @say + xHarbour Divinópolis/ MG
  18. Olá Kleyber, > Só queria te perguntar se ele tomaria conta do famoso erro "TOO MANY..." que aparece de vez em quando e que não gera nenhum ERROR.LOG. Teste este programa aí e você verá que a tela de erro do fivewin não irá aparecer, mas.... o ERROR.LOG será gerado como demonstro abaixo: citação:#include "fivewin.ch" function MAIN SetUnhandledExceptionFilter( @GpfHandler() ) && Teste assim primeiro *SetUnhandledExceptionFilter( @GpfHandler() ) && e depois assim (apague a linha acima) && com esta função asteriscada o && ERROR.LOG não será gerado msgstop( "Vou simular uma chamada infinita" ) TESTE() msgstop( "Não vou chegar aqui" ) return NIL function TESTE TESTE() return NIL #include "hbexcept.ch" ******************* function GpfHandler( Exception ) ******************* local cMsg, nCode, oError ** TraceLog( "GPF:", Exception ) ** memowrit( "gpf.txt", valtoprg( Exception ) ) IF Exception <> NIL nCode := Exception:ExceptionRecord:ExceptionCode SWITCH nCode CASE EXCEPTION_ACCESS_VIOLATION cMsg := "EXCEPTION_ACCESS_VIOLATION - O thread tentou ler/escrever num endereço virtual ao qual não tinha acesso." EXIT CASE EXCEPTION_DATATYPE_MISALIGNMENT cMsg := "EXCEPTION_DATATYPE_MISALIGNMENT - O thread tentou ler/escrever dados desalinhados em hardware que não oferece alinhamento. Por exemplo, valores de 16 bits precisam ser alinhados em limites de 2 bytes; valores de 32 bits em limites de 4 bytes, etc. " EXIT CASE EXCEPTION_ARRAY_BOUNDS_EXCEEDED cMsg := "EXCEPTION_ARRAY_BOUNDS_EXCEEDED - O thread tentou acessar um elemento de array fora dos limites e o hardware possibilita a checagem de limites." EXIT CASE EXCEPTION_FLT_DENORMAL_OPERAND cMsg := "EXCEPTION_FLT_DENORMAL_OPERAND - Um dos operandos numa operação de ponto flutuante está desnormatizado. Um valor desnormatizado é um que seja pequeno demais para poder ser representado no formato de ponto flutuante padrão." EXIT CASE EXCEPTION_FLT_DIVIDE_BY_ZERO cMsg := "EXCEPTION_FLT_DIVIDE_BY_ZERO - O thread tentou dividir um valor em ponto flutuante por um divisor em ponto flutuante igual a zero." EXIT CASE EXCEPTION_FLT_INEXACT_RESULT cMsg := "EXCEPTION_FLT_INEXACT_RESULT - O resultado de uma operação de ponto flutuante não pode ser representado como uma fração decimal exata." EXIT CASE EXCEPTION_FLT_INVALID_OPERATION cMsg := "EXCEPTION_FLT_INVALID_OPERATION - Qualquer operação de ponto flutuante não incluída na lista." EXIT CASE EXCEPTION_FLT_OVERFLOW cMsg := "EXCEPTION_FLT_OVERFLOW - O expoente de uma operação de ponto flutuante é maior que a magnitude permitida pelo tipo correspondente." EXIT CASE EXCEPTION_FLT_STACK_CHECK cMsg := 'EXCEPTION_FLT_STACK_CHECK - A pilha ficou desalinhada ("estourou" ou "ficou abaixo") como resultado de uma operação de ponto flutuante.' EXIT CASE EXCEPTION_FLT_UNDERFLOW cMsg := "EXCEPTION_FLT_UNDERFLOW - O expoente de uma operação de ponto flutuante é menor que a magnitude permitida pelo tipo correspondente." EXIT CASE EXCEPTION_INT_DIVIDE_BY_ZERO cMsg := "EXCEPTION_INT_DIVIDE_BY_ZERO - O thread tentou dividir um valor inteiro por um divisor inteiro igual a zero." EXIT CASE EXCEPTION_INT_OVERFLOW cMsg := "EXCEPTION_INT_OVERFLOW - O resultado de uma operação com inteiros causou uma transposição (carry) além do bit mais significativo do resultado." EXIT CASE EXCEPTION_PRIV_INSTRUCTION cMsg := "EXCEPTION_PRIV_INSTRUCTION - O thread tentou executar uma instrução cuja operação não é permitida no modo de máquina atual." EXIT CASE EXCEPTION_IN_PAGE_ERROR cMsg := "EXCEPTION_IN_PAGE_ERROR - O thread tentou acessar uma página que não estava presente e o sistema não foi capaz de carregar a página. Esta exceção pode ocorrer, por exemplo, se uma conexão de rede é perdida durante a execução do programa via rede." EXIT CASE EXCEPTION_ILLEGAL_INSTRUCTION cMsg := "EXCEPTION_ILLEGAL_INSTRUCTION - O thread tentou executar uma instrução inválida." EXIT CASE EXCEPTION_NONCONTINUABLE_EXCEPTION cMsg := "EXCEPTION_NONCONTINUABLE_EXCEPTION - O thread tentou continuar a execução após a ocorrência de uma exceção irrecuperável." EXIT CASE EXCEPTION_STACK_OVERFLOW cMsg := "EXCEPTION_STACK_OVERFLOW - O thread esgotou sua pilha (estouro de pilha)." EXIT CASE EXCEPTION_INVALID_DISPOSITION cMsg := "EXCEPTION_INVALID_DISPOSITION - Um manipulador (handle) de exceções retornou uma disposição inválida para o tratador de exceções. Uma exceção deste tipo nunca deveria ser encontrada em linguagens de médio/alto nível." EXIT CASE EXCEPTION_GUARD_PAGE cMsg := "CASE EXCEPTION_GUARD_PAGE" EXIT CASE EXCEPTION_INVALID_HANDLE cMsg := "EXCEPTION_INVALID_HANDLE" EXIT CASE EXCEPTION_SINGLE_STEP cMsg := "EXCEPTION_SINGLE_STEP Um interceptador de passos ou outro mecanismo de instrução isolada sinalizou que uma instrução foi executada." EXIT CASE EXCEPTION_BREAKPOINT cMsg := "EXCEPTION_BREAKPOINT - Foi encontrado um ponto de parada (breakpoint)." EXIT DEFAULT cMsg := "UNKNOWN EXCEPTION (" + cStr( Exception:ExceptionRecord:ExceptionCode ) + ")" END ** IF cMsg <> NIL ** Tracelog( "GPF Intercepted!", cMsg ) ** Alert( "GPF Intercepted!" + CRLF + cMsg ) ** ENDIF ENDIF ** Throw( ErrorNew( "GPFHANDLER", 0, 0, ProcName(), "Erro de GPF", { cMsg, Exception, nCode }, Procfile(), Procname(), procline() ) ) oError := ErrorNew( "GPFHANDLER", 0, 0, ProcName(), "Erro de GPF", { cMsg, Exception, nCode }, Procfile(), Procname(), procline() ) ** MsgInfo( GetErrorInfo( oError ), "Error" ) ErrorDialog( oError ) RETURN EXCEPTION_EXECUTE_HANDLER id=quote>id=quote>ERROR.LOG gerado citação:Application =========== Path and name: C:\testes\gpfsimu.exe (32 bits) Size: 1,555,968 bytes Time from start: 0 hours 0 mins 2 secs Error occurred at: 10/08/08, 15:56:21 Error description: Error GPFHANDLER/0 Erro de GPF: GPFHANDLER Args: [ 1] = C EXCEPTION_STACK_OVERFLOW - O thread esgotou sua pilha (estouro de pilha). [ 2] = O Object [ 3] = N -1073741571 Stack Calls =========== Called from: GPFSIMU.PRG => TESTE(17) Called from: GPFSIMU.PRG => TESTE(17) Called from: GPFSIMU.PRG => TESTE(17) Called from: GPFSIMU.PRG => TESTE(17) Called from: GPFSIMU.PRG => TESTE(17) Called from: GPFSIMU.PRG => TESTE(17) Called from: GPFSIMU.PRG => TESTE(17) Called from: GPFSIMU.PRG => TESTE(17) Called from: GPFSIMU.PRG => TESTE(17) Called from: GPFSIMU.PRG => TESTE(17) Called from: GPFSIMU.PRG => TESTE(17) Called from: GPFSIMU.PRG => TESTE(17) Called from: GPFSIMU.PRG => TESTE(17) Called from: GPFSIMU.PRG => TESTE(17) Called from: GPFSIMU.PRG => TESTE(17) Called from: GPFSIMU.PRG => TESTE(17) Called from: GPFSIMU.PRG => TESTE(17) Called from: GPFSIMU.PRG => TESTE(17) Called from: GPFSIMU.PRG => TESTE(17) Called from: GPFSIMU.PRG => TESTE(17) Called from: GPFSIMU.PRG => TESTE(17) Called from: GPFSIMU.PRG => TESTE(17) Called from: GPFSIMU.PRG => TESTE(17) Called from: GPFSIMU.PRG => TESTE(17) Called from: GPFSIMU.PRG => TESTE(17) Called from: GPFSIMU.PRG => TESTE(17) Called from: GPFSIMU.PRG => TESTE(17) Called from: GPFSIMU.PRG => TESTE(17) Called from: GPFSIMU.PRG => TESTE(17) Called from: GPFSIMU.PRG => TESTE(17) Called from: GPFSIMU.PRG => TESTE(17) Called from: GPFSIMU.PRG => TESTE(17) Called from: GPFSIMU.PRG => TESTE(17) Called from: GPFSIMU.PRG => TESTE(17) Called from: GPFSIMU.PRG => TESTE(17) Called from: GPFSIMU.PRG => TESTE(17) Called from: GPFSIMU.PRG => TESTE(17) Called from: GPFSIMU.PRG => TESTE(17) Called from: GPFSIMU.PRG => TESTE(17) Called from: GPFSIMU.PRG => TESTE(17) Called from: GPFSIMU.PRG => TESTE(17) Called from: GPFSIMU.PRG => TESTE(17) Called from: GPFSIMU.PRG => TESTE(17) Called from: GPFSIMU.PRG => TESTE(17) Called from: GPFSIMU.PRG => TESTE(17) Called from: GPFSIMU.PRG => TESTE(17) Called from: GPFSIMU.PRG => TESTE(17) Called from: GPFSIMU.PRG => TESTE(17) Called from: GPFSIMU.PRG => TESTE(17) Called from: GPFSIMU.PRG => TESTE(17) Called from: GPFSIMU.PRG => TESTE(17) Called from: GPFSIMU.PRG => TESTE(17) Called from: GPFSIMU.PRG => TESTE(17) Called from: GPFSIMU.PRG => TESTE(17) Called from: GPFSIMU.PRG => TESTE(17) Called from: GPFSIMU.PRG => TESTE(17) Called from: GPFSIMU.PRG => TESTE(17) Called from: GPFSIMU.PRG => TESTE(17) Called from: GPFSIMU.PRG => TESTE(17) Called from: GPFSIMU.PRG => TESTE(17) Called from: GPFSIMU.PRG => TESTE(17) Called from: GPFSIMU.PRG => TESTE(17) Called from: GPFSIMU.PRG => TESTE(17) Called from: GPFSIMU.PRG => TESTE(17) Called from: GPFSIMU.PRG => TESTE(17) Called from: GPFSIMU.PRG => TESTE(17) Called from: GPFSIMU.PRG => TESTE(17) Called from: GPFSIMU.PRG => TESTE(17) Called from: GPFSIMU.PRG => TESTE(17) Called from: GPFSIMU.PRG => TESTE(17) Called from: GPFSIMU.PRG => TESTE(17) Called from: GPFSIMU.PRG => TESTE(17) System ====== CPU type: 75 Mhz Hardware memory: 1280 megs Free System resources: 90 % GDI resources: 90 % User resources: 90 % Compiler version: xHarbour build 1.1.0 Intl. (SimpLex) (Rev. 6220) Windows version: 5.1, Build 2600 Service Pack 2 Windows total applications running: 0 Variables in use ================ Procedure Type Value ========================== TESTE TESTE TESTE TESTE TESTE TESTE TESTE TESTE TESTE TESTE TESTE TESTE TESTE TESTE TESTE TESTE TESTE TESTE TESTE TESTE TESTE TESTE TESTE TESTE TESTE TESTE TESTE TESTE TESTE TESTE TESTE TESTE TESTE TESTE TESTE TESTE TESTE TESTE TESTE TESTE TESTE TESTE TESTE TESTE TESTE TESTE TESTE TESTE TESTE TESTE TESTE TESTE TESTE TESTE TESTE TESTE TESTE TESTE TESTE TESTE TESTE TESTE TESTE TESTE TESTE TESTE TESTE TESTE TESTE TESTE TESTE TESTE Linked RDDs =========== DBF DBFFPT DBFNTX DBFBLOB DataBases in use ================ Classes in use: =============== 1 HASHENTRY 2 C Structure C Array of [2] CType: -4 3 C Structure ULONGLONG 4 C Structure C Array of [2] CType: 4 5 C Structure LONGLONG 6 C Structure C Array of [15] CType: -40 7 C Structure EXCEPTION_RECORD 8 C Structure C Array of [4] CType: -4 9 C Structure CONTEXT 10 C Structure EXCEPTION_POINTERS 11 HBCLASS 12 ERROR 13 HBOBJECT 14 TREG32 Memory Analysis =============== 104 Static variables Dynamic memory consume: Actual Value: 0 bytes Highest Value: 0 bytes id=quote>id=quote>Olá Luiz, >quer dizer a gente vai saber onde tá ocorrendo conflitos... Exatamente isso (hehe) Abraço a todos e chega de escuridão (GPF) Rossine. Rossine FW 2.2c + @say + Clipper 5.2e + libs 5.3b / FWH 2.7 + @say + xHarbour Divinópolis/ MG Editado por - qiinfo on 08/10/2008 16:09:54
  19. Olá Luiz, >vamos aguardar agora um GPF, não é isso ??? Para simular o erro de GPF use __GENGPF() em qualquer parte de seu sistema e verá que vai mostrar a tela de erro do fivewin e não a tela do rWindows, ou senão espere quando acontecer (espero que nunca hehe). Olá João, Creio que vá funcionar com qualquer FWH. A minha versão é a ultima, FWHX 8.09. Aqui está funcionando certinho e gera o arquivo ERROR.LOG e ele é mostrado na tela pelo programa ERRSYSW.PRG. Faz o seguinte, poste parte do seu programa principal para eu ver o que você está fazendo ok ? Seria mais ou menos isto: #include "fivewin.ch" function MAIN SetUnhandledExceptionFilter( @GpfHandler() ) ...bla,bla,bla... return NIL Function GpfHandler( Exception ) ...bla,bla,bla... RETURN EXCEPTION_EXECUTE_HANDLER Abraços, Rossine. Rossine FW 2.2c + @say + Clipper 5.2e + libs 5.3b / FWH 2.7 + @say + xHarbour Divinópolis/ MG
  20. Olá João, Na sua função MAIN() incorpore a chamada a esta função: SetUnhandledExceptionFilter( @GpfHandler() ) ...e também o codigo da função acima: assim: #include "fivewin.ch" function MAIN SetUnhandledExceptionFilter( @GpfHandler() ) ...bla,bla,bla... return NIL Function GpfHandler( Exception ) ...bla,bla,bla... RETURN EXCEPTION_EXECUTE_HANDLER Só isso e pronto. Quando ocorrer algum erro de GPF no seu sistema, não irá aparecer aquela tela de GPF do rWindows mais e sim o mapa de erro do fwh. A função __GenGpf() é uma função do FWH. Não é para colocar ela no seu sistema não, ela simplesmente simula um erro de GPF, ok ? Abraços, Rossine. Rossine FW 2.2c + @say + Clipper 5.2e + libs 5.3b / FWH 2.7 + @say + xHarbour Divinópolis/ MG
  21. Luiz, Mudou o seu ERRSYSW.PRG ? A função "ErrorDialog( e )" não pode ser "static", retire o "static". Abraços, Rossine FW 2.2c + @say + Clipper 5.2e + libs 5.3b / FWH 2.7 + @say + xHarbour Divinópolis/ MG
  22. Olá pessoal, O intuito deste programa é não mostrar a tela de erro de GPF padrão do rWindows, e sim a tela de erro do FWH até o ponto onde ocorreu o erro. Serve tipo um trace, para sabermos exatamente onde correu o GPF. Tipo: citação:Application =========== Path and name: C:\fwh\samples\testgpf.exe (32 bits) Size: 1,555,456 bytes Time from start: 0 hours 0 mins 0 secs Error occurred at: 10/08/08, 11:52:15 Error description: Error GPFHANDLER/0 Erro de GPF: GPFHANDLER Args: [ 1] = C EXCEPTION_ACCESS_VIOLATION - O thread tentou ler/escrever num endereço virtual ao qual não tinha acesso. [ 2] = O Object [ 3] = N -1073741819 Stack Calls =========== Called from: => __GENGPF(0) Called from: TESTGPF.PRG => MAIN(9) System ====== CPU type: 75 Mhz Hardware memory: 1280 megs Free System resources: 90 % GDI resources: 90 % User resources: 90 % Compiler version: xHarbour build 1.1.0 Intl. (SimpLex) (Rev. 6220) Windows version: 5.1, Build 2600 Service Pack 2 Windows total applications running: 0 Variables in use ================ Procedure Type Value ========================== __GENGPF MAIN Linked RDDs =========== DBF DBFFPT DBFNTX DBFBLOB id=quote>id=quote>Lembrem-se: Tem que mudar o ERRSYSW.PRG e linkar ele junto a TESTGPF.PRG. Entenderam ? (hehehe) Detalhe: Testado com xharbour COMERCIAL (xacc) não testei com XHARBOUR.ORG Abraços, Rossine FW 2.2c + @say + Clipper 5.2e + libs 5.3b / FWH 2.7 + @say + xHarbour Divinópolis/ MG Editado por - qiinfo on 08/10/2008 12:00:53
  23. Olá, Deixo aqui um programa que fiz para mostrar como é possível ver onde ocorreu o erro de GPF. É necessário colocar a chamada a função "SetUnhandledExceptionFilter()" dentro da "function MAIN". citação:#include "fivewin.ch" function Main() SetUnhandledExceptionFilter( @GpfHandler() ) msgstop( "-Simulando erro GPF-" ) __GenGpf() msgstop( "Não vou chegar aqui !!!" ) return NIL #include "hbexcept.ch" ******************* Function GpfHandler( Exception ) ******************* local cMsg, nCode, oError ** TraceLog( "GPF:", Exception ) ** memowrit( "gpf.txt", valtoprg( Exception ) ) IF Exception <> NIL nCode := Exception:ExceptionRecord:ExceptionCode SWITCH nCode CASE EXCEPTION_ACCESS_VIOLATION cMsg := "EXCEPTION_ACCESS_VIOLATION - O thread tentou ler/escrever num endereço virtual ao qual não tinha acesso." EXIT CASE EXCEPTION_DATATYPE_MISALIGNMENT cMsg := "EXCEPTION_DATATYPE_MISALIGNMENT - O thread tentou ler/escrever dados desalinhados em hardware que não oferece alinhamento. Por exemplo, valores de 16 bits precisam ser alinhados em limites de 2 bytes; valores de 32 bits em limites de 4 bytes, etc. " EXIT CASE EXCEPTION_ARRAY_BOUNDS_EXCEEDED cMsg := "EXCEPTION_ARRAY_BOUNDS_EXCEEDED - O thread tentou acessar um elemento de array fora dos limites e o hardware possibilita a checagem de limites." EXIT CASE EXCEPTION_FLT_DENORMAL_OPERAND cMsg := "EXCEPTION_FLT_DENORMAL_OPERAND - Um dos operandos numa operação de ponto flutuante está desnormatizado. Um valor desnormatizado é um que seja pequeno demais para poder ser representado no formato de ponto flutuante padrão." EXIT CASE EXCEPTION_FLT_DIVIDE_BY_ZERO cMsg := "EXCEPTION_FLT_DIVIDE_BY_ZERO - O thread tentou dividir um valor em ponto flutuante por um divisor em ponto flutuante igual a zero." EXIT CASE EXCEPTION_FLT_INEXACT_RESULT cMsg := "EXCEPTION_FLT_INEXACT_RESULT - O resultado de uma operação de ponto flutuante não pode ser representado como uma fração decimal exata." EXIT CASE EXCEPTION_FLT_INVALID_OPERATION cMsg := "EXCEPTION_FLT_INVALID_OPERATION - Qualquer operação de ponto flutuante não incluída na lista." EXIT CASE EXCEPTION_FLT_OVERFLOW cMsg := "EXCEPTION_FLT_OVERFLOW - O expoente de uma operação de ponto flutuante é maior que a magnitude permitida pelo tipo correspondente." EXIT CASE EXCEPTION_FLT_STACK_CHECK cMsg := 'EXCEPTION_FLT_STACK_CHECK - A pilha ficou desalinhada ("estourou" ou "ficou abaixo") como resultado de uma operação de ponto flutuante.' EXIT CASE EXCEPTION_FLT_UNDERFLOW cMsg := "EXCEPTION_FLT_UNDERFLOW - O expoente de uma operação de ponto flutuante é menor que a magnitude permitida pelo tipo correspondente." EXIT CASE EXCEPTION_INT_DIVIDE_BY_ZERO cMsg := "EXCEPTION_INT_DIVIDE_BY_ZERO - O thread tentou dividir um valor inteiro por um divisor inteiro igual a zero." EXIT CASE EXCEPTION_INT_OVERFLOW cMsg := "EXCEPTION_INT_OVERFLOW - O resultado de uma operação com inteiros causou uma transposição (carry) além do bit mais significativo do resultado." EXIT CASE EXCEPTION_PRIV_INSTRUCTION cMsg := "EXCEPTION_PRIV_INSTRUCTION - O thread tentou executar uma instrução cuja operação não é permitida no modo de máquina atual." EXIT CASE EXCEPTION_IN_PAGE_ERROR cMsg := "EXCEPTION_IN_PAGE_ERROR - O thread tentou acessar uma página que não estava presente e o sistema não foi capaz de carregar a página. Esta exceção pode ocorrer, por exemplo, se uma conexão de rede é perdida durante a execução do programa via rede." EXIT CASE EXCEPTION_ILLEGAL_INSTRUCTION cMsg := "EXCEPTION_ILLEGAL_INSTRUCTION - O thread tentou executar uma instrução inválida." EXIT CASE EXCEPTION_NONCONTINUABLE_EXCEPTION cMsg := "EXCEPTION_NONCONTINUABLE_EXCEPTION - O thread tentou continuar a execução após a ocorrência de uma exceção irrecuperável." EXIT CASE EXCEPTION_STACK_OVERFLOW cMsg := "EXCEPTION_STACK_OVERFLOW - O thread esgotou sua pilha (estouro de pilha)." EXIT CASE EXCEPTION_INVALID_DISPOSITION cMsg := "EXCEPTION_INVALID_DISPOSITION - Um manipulador (handle) de exceções retornou uma disposição inválida para o tratador de exceções. Uma exceção deste tipo nunca deveria ser encontrada em linguagens de médio/alto nível." EXIT CASE EXCEPTION_GUARD_PAGE cMsg := "CASE EXCEPTION_GUARD_PAGE" EXIT CASE EXCEPTION_INVALID_HANDLE cMsg := "EXCEPTION_INVALID_HANDLE" EXIT CASE EXCEPTION_SINGLE_STEP cMsg := "EXCEPTION_SINGLE_STEP Um interceptador de passos ou outro mecanismo de instrução isolada sinalizou que uma instrução foi executada." EXIT CASE EXCEPTION_BREAKPOINT cMsg := "EXCEPTION_BREAKPOINT - Foi encontrado um ponto de parada (breakpoint)." EXIT DEFAULT cMsg := "UNKNOWN EXCEPTION (" + cStr( Exception:ExceptionRecord:ExceptionCode ) + ")" END ** IF cMsg <> NIL ** Tracelog( "GPF Intercepted!", cMsg ) ** Alert( "GPF Intercepted!" + CRLF + cMsg ) ** ENDIF ENDIF ** Throw( ErrorNew( "GPFHANDLER", 0, 0, ProcName(), "Erro de GPF", { cMsg, Exception, nCode }, Procfile(), Procname(), procline() ) ) oError := ErrorNew( "GPFHANDLER", 0, 0, ProcName(), "Erro de GPF", { cMsg, Exception, nCode }, Procfile(), Procname(), procline() ) ErrorDialog( oError ) RETURN EXCEPTION_EXECUTE_HANDLER id=quote>id=quote>É preciso mudar isto em ERRSYSW.PRG citação:/************* * ErrorDialog() */ *static function ErrorDialog( e ) // -> logical or quits App. function ErrorDialog( e ) // -> logical or quits App. id=quote>id=quote>OBS: Compile este exemplo com o ERRSYSW.PRG com a mudança acima. Com isto quando ocorrer o erro de GPF, será mostrada a lista de erros do FWH. Espero que sirva para vocês Abraços, Editado por - qiinfo on 08/10/2008 10:11:37
  24. Olá, Deixo aqui um programa que fiz para mostrar como é possível ver onde ocorreu o erro de GPF. É necessário colocar a chamada a função "SetUnhandledExceptionFilter()" dentro da "function MAIN". citação:#include "fivewin.ch" function Main() SetUnhandledExceptionFilter( @GpfHandler() ) msgstop( "-Simulando erro GPF-" ) __GenGpf() msgstop( "Não vou chegar aqui !!!" ) return NIL #include "hbexcept.ch" ******************* Function GpfHandler( Exception ) ******************* local cMsg, nCode, oError ** TraceLog( "GPF:", Exception ) ** memowrit( "gpf.txt", valtoprg( Exception ) ) IF Exception <> NIL nCode := Exception:ExceptionRecord:ExceptionCode SWITCH nCode CASE EXCEPTION_ACCESS_VIOLATION cMsg := "EXCEPTION_ACCESS_VIOLATION - O thread tentou ler/escrever num endereço virtual ao qual não tinha acesso." EXIT CASE EXCEPTION_DATATYPE_MISALIGNMENT cMsg := "EXCEPTION_DATATYPE_MISALIGNMENT - O thread tentou ler/escrever dados desalinhados em hardware que não oferece alinhamento. Por exemplo, valores de 16 bits precisam ser alinhados em limites de 2 bytes; valores de 32 bits em limites de 4 bytes, etc. " EXIT CASE EXCEPTION_ARRAY_BOUNDS_EXCEEDED cMsg := "EXCEPTION_ARRAY_BOUNDS_EXCEEDED - O thread tentou acessar um elemento de array fora dos limites e o hardware possibilita a checagem de limites." EXIT CASE EXCEPTION_FLT_DENORMAL_OPERAND cMsg := "EXCEPTION_FLT_DENORMAL_OPERAND - Um dos operandos numa operação de ponto flutuante está desnormatizado. Um valor desnormatizado é um que seja pequeno demais para poder ser representado no formato de ponto flutuante padrão." EXIT CASE EXCEPTION_FLT_DIVIDE_BY_ZERO cMsg := "EXCEPTION_FLT_DIVIDE_BY_ZERO - O thread tentou dividir um valor em ponto flutuante por um divisor em ponto flutuante igual a zero." EXIT CASE EXCEPTION_FLT_INEXACT_RESULT cMsg := "EXCEPTION_FLT_INEXACT_RESULT - O resultado de uma operação de ponto flutuante não pode ser representado como uma fração decimal exata." EXIT CASE EXCEPTION_FLT_INVALID_OPERATION cMsg := "EXCEPTION_FLT_INVALID_OPERATION - Qualquer operação de ponto flutuante não incluída na lista." EXIT CASE EXCEPTION_FLT_OVERFLOW cMsg := "EXCEPTION_FLT_OVERFLOW - O expoente de uma operação de ponto flutuante é maior que a magnitude permitida pelo tipo correspondente." EXIT CASE EXCEPTION_FLT_STACK_CHECK cMsg := 'EXCEPTION_FLT_STACK_CHECK - A pilha ficou desalinhada ("estourou" ou "ficou abaixo") como resultado de uma operação de ponto flutuante.' EXIT CASE EXCEPTION_FLT_UNDERFLOW cMsg := "EXCEPTION_FLT_UNDERFLOW - O expoente de uma operação de ponto flutuante é menor que a magnitude permitida pelo tipo correspondente." EXIT CASE EXCEPTION_INT_DIVIDE_BY_ZERO cMsg := "EXCEPTION_INT_DIVIDE_BY_ZERO - O thread tentou dividir um valor inteiro por um divisor inteiro igual a zero." EXIT CASE EXCEPTION_INT_OVERFLOW cMsg := "EXCEPTION_INT_OVERFLOW - O resultado de uma operação com inteiros causou uma transposição (carry) além do bit mais significativo do resultado." EXIT CASE EXCEPTION_PRIV_INSTRUCTION cMsg := "EXCEPTION_PRIV_INSTRUCTION - O thread tentou executar uma instrução cuja operação não é permitida no modo de máquina atual." EXIT CASE EXCEPTION_IN_PAGE_ERROR cMsg := "EXCEPTION_IN_PAGE_ERROR - O thread tentou acessar uma página que não estava presente e o sistema não foi capaz de carregar a página. Esta exceção pode ocorrer, por exemplo, se uma conexão de rede é perdida durante a execução do programa via rede." EXIT CASE EXCEPTION_ILLEGAL_INSTRUCTION cMsg := "EXCEPTION_ILLEGAL_INSTRUCTION - O thread tentou executar uma instrução inválida." EXIT CASE EXCEPTION_NONCONTINUABLE_EXCEPTION cMsg := "EXCEPTION_NONCONTINUABLE_EXCEPTION - O thread tentou continuar a execução após a ocorrência de uma exceção irrecuperável." EXIT CASE EXCEPTION_STACK_OVERFLOW cMsg := "EXCEPTION_STACK_OVERFLOW - O thread esgotou sua pilha (estouro de pilha)." EXIT CASE EXCEPTION_INVALID_DISPOSITION cMsg := "EXCEPTION_INVALID_DISPOSITION - Um manipulador (handle) de exceções retornou uma disposição inválida para o tratador de exceções. Uma exceção deste tipo nunca deveria ser encontrada em linguagens de médio/alto nível." EXIT CASE EXCEPTION_GUARD_PAGE cMsg := "CASE EXCEPTION_GUARD_PAGE" EXIT CASE EXCEPTION_INVALID_HANDLE cMsg := "EXCEPTION_INVALID_HANDLE" EXIT CASE EXCEPTION_SINGLE_STEP cMsg := "EXCEPTION_SINGLE_STEP Um interceptador de passos ou outro mecanismo de instrução isolada sinalizou que uma instrução foi executada." EXIT CASE EXCEPTION_BREAKPOINT cMsg := "EXCEPTION_BREAKPOINT - Foi encontrado um ponto de parada (breakpoint)." EXIT DEFAULT cMsg := "UNKNOWN EXCEPTION (" + cStr( Exception:ExceptionRecord:ExceptionCode ) + ")" END ** IF cMsg <> NIL ** Tracelog( "GPF Intercepted!", cMsg ) ** Alert( "GPF Intercepted!" + CRLF + cMsg ) ** ENDIF ENDIF ** Throw( ErrorNew( "GPFHANDLER", 0, 0, ProcName(), "Erro de GPF", { cMsg, Exception, nCode }, Procfile(), Procname(), procline() ) ) oError := ErrorNew( "GPFHANDLER", 0, 0, ProcName(), "Erro de GPF", { cMsg, Exception, nCode }, Procfile(), Procname(), procline() ) ErrorDialog( oError ) RETURN EXCEPTION_EXECUTE_HANDLER id=quote>id=quote>É preciso mudar isto em ERRSYSW.PRG citação:/************* * ErrorDialog() */ *static function ErrorDialog( e ) // -> logical or quits App. function ErrorDialog( e ) // -> logical or quits App. id=quote>id=quote>OBS: Compile este exemplo com o ERRSYSW.PRG com a mudança acima. Com isto quando ocorrer o erro de GPF, será mostrada a lista de erros do FWH. Espero que sirva para vocês Abraços, Editado por - qiinfo on 08/10/2008 10:11:37
  25. Olá Giovany, Tive que mudar a função abaixo pois não estava me retornando o "finger.bmp". METHOD St_EventInfo( f_Event, f_aParams, f_pParams, f_oFinger ) Class TGrFinger ... ELSEIF cEvent == "ImageAcquired" .or. cEvent == "5" FERASE("c:\finger.bmp") ** nRet := st_oFinger:Do("CapSaveRawImageToFile",f_aParams[ 4], f_aParams[ 2], f_aParams[ 3], "c:\finger.bmp", GRCAP_IMAGE_FORMAT_BMP) nRet := GrCapSaveRawImageToFile( f_aParams[ 4], f_aParams[ 2], f_aParams[ 3], "c:\finger.bmp", GRCAP_IMAGE_FORMAT_BMP ) id=code>id=code>Mais uma vez, obrigado por compartilhar os fontes com nós Rossine. Rossine FW 2.2c + @say + Clipper 5.2e + libs 5.3b / FWH 2.7 + @say + xHarbour Divinópolis/ MG
×
×
  • Create New...