Página 1 de 1
Alguém com GPF ao usar objetos?
Enviado: 31 Dez 2013 12:17
por JoséQuintas
Fiz uma descoberta meio esquisita, e já postei lá nos desenvolvedores:
ao usar uma variábel estática para a conexão MySql, eu tenho GPF ao sair do sistema.
Consegui resolver alterando o conteúdo da variável da conexão antes de sair.
Tipo:
Como comentário adicional, no VB é necessário algo especial no encerramento de variáveis objecto.
No VB6 tinha que usar SET CN = Nothing (algo como variavel = NIL )
E no VB.NET: cn.Dispose()
Se alguém estiver tendo GPF no sistema ao usar algum controle/dll externo, poderia fazer o teste pra confirmar se resolve.
Alguém com GPF ao usar objetos?
Enviado: 31 Dez 2013 21:24
por marcosgambeta
José,
Está usando ADO na conexão com o MySQL ou algum outro recurso do Harbour ?
Alguém com GPF ao usar objetos?
Enviado: 01 Jan 2014 04:58
por JoséQuintas
Isto:
cn := win_OleCreateObject("ADODB.Connection")
Se a variável for estática, precisa zerar o conteúdo antes de encerrar o sistema.
pode ser: cn := "any"
Alguém com GPF ao usar objetos?
Enviado: 01 Jan 2014 05:27
por JoséQuintas
O teste prático:
Código: Selecionar todos
PROCEDURE Main
LOCAL x
x := MySqlConnection()
? ValType( X )
? ValType( MySqlConnection() )
? "AppcnMySql() is type " + ValType( AppcnMySql() )
AppcnMySql( "any" )
RETURN
FUNCTION AppCnMySql( xValue )
STATIC AppcnMySql
IF ValType( AppcnMySql ) != "O"
AppcnMySql := MySqlConnection()
ENDIF
IF xValue != NIL
AppcnMySql := xValue
ENDIF
RETURN AppcnMySql
FUNCTION MySqlConnection()
LOCAL ocn
ocn := win_OleCreateObject( "ADODB.Connection" )
ocn:ConnectionString := "Driver={MySql ODBC 3.51 Driver};Server=xserver;Option=131072;Stmt=;" + ;
"Database=jpatecnologia;User ID=xuser;Password=xpassword;"
ocn:CursorLocation := 3 // cliente
ocn:CommandTimeOut := 30 // seconds
ocn:ConnectionTimeOut := 30 // seconds
RETURN ocn
Primeiro compilado do jeito que está:
Código: Selecionar todos
d:\testes\ado>hbmk2 test
Harbour 3.2.0dev (r1312270146)
Copyright (c) 1999-2013, http://harbour-project.org/
Compiling 'test.prg'...
Lines 28, Functions/Procedures 3
Generating C source output to 'd:\temp\hbmk_bmn2yk.dir\test.c'... Done.
d:\testes\ado>test
O
O
AppcnMySql() is type O
d:\testes\ado>
Agora bloqueando a linha que altera do conteúdo da variável antes de sair:
// AppcnMySql( "any" )
Código: Selecionar todos
d:\testes\ado>hbmk2 test
Harbour 3.2.0dev (r1312270146)
Copyright (c) 1999-2013, http://harbour-project.org/
Compiling 'test.prg'...
Lines 28, Functions/Procedures 3
Generating C source output to 'd:\temp\hbmk_0b8npw.dir\test.c'... Done.
d:\testes\ado>test
O
O
AppcnMySql() is type O
Unrecoverable error 6005: Exception error:
Exception Code:C0000005
Exception Address:004015CD
EAX:00000000 EBX:003B41E4 ECX:0033188C EDX:00331F0C
ESI:02352720 EDI:003B423C EBP:00000001
CS:EIP:0023:004015CD SS:ESP:002B:0028FE10
DS:002B ES:002B FS:0053 GS:002B
Flags:00010246
CS:EIP: 8B 06 89 34 24 FF 50 08 83 EC 04 83 C4 14 5B 5E
SS:ESP: 00000000 0036B648 FFFFFFFE 00411F2B 00000002 003B41E4 003B41D4 004193B5 003B41E4 0036D4C8 00000030 00411F2B
00000000 003B4224 00000001 00456789
C stack:
EIP: EBP: Frame: OldEBP, RetAddr, Params...
Modules:
0x00400000 0x0014C000 d:\testes\ado\test.exe
0x770D0000 0x00180000 C:\Windows\SysWOW64\ntdll.dll
0x76090000 0x00110000 C:\Windows\syswow64\kernel32.dll
0x757E0000 0x00047000 C:\Windows\syswow64\KERNELBASE.dll
0x764F0000 0x000AC000 C:\Windows\syswow64\msvcrt.dll
0x74840000 0x0015C000 C:\Windows\syswow64\OLE32.dll
0x75B30000 0x00090000 C:\Windows\syswow64\GDI32.dll
0x75970000 0x00100000 C:\Windows\syswow64\USER32.dll
0x762C0000 0x000A0000 C:\Windows\syswow64\ADVAPI32.dll
0x75950000 0x00019000 C:\Windows\SysWOW64\sechost.dll
0x75F30000 0x000F0000 C:\Windows\syswow64\RPCRT4.dll
0x747B0000 0x00060000 C:\Windows\syswow64\SspiCli.dll
0x747A0000 0x0000C000 C:\Windows\syswow64\CRYPTBASE.dll
0x770A0000 0x0000A000 C:\Windows\syswow64\LPK.dll
0x763A0000 0x0009D000 C:\Windows\syswow64\USP10.dll
0x75A70000 0x0008F000 C:\Windows\syswow64\OLEAUT32.DLL
0x765A0000 0x00060000 C:\Windows\system32\IMM32.DLL
0x74A30000 0x000CC000 C:\Windows\syswow64\MSCTF.dll
0x72950000 0x00080000 C:\Windows\system32\uxtheme.dll
0x749A0000 0x00083000 C:\Windows\syswow64\CLBCatQ.DLL
0x73710000 0x00016000 C:\Windows\system32\CRYPTSP.dll
0x736D0000 0x0003B000 C:\Windows\system32\rsaenh.dll
0x70B80000 0x0000E000 C:\Windows\system32\RpcRtRemote.dll
d:\testes\ado>
Alguém com GPF ao usar objetos?
Enviado: 02 Jan 2014 16:28
por marcosgambeta
José,
Vi na lista de desenvolvimento do Harbour que o erro foi corrigido. Bom para todo mundo. É por isto que é importante relatar qualquer comportamento estranho no uso do Harbour ou, pelo menos, tentar identificar a causa do problema. Pode ser um erro do desenvolvedor, um erro da ferramenta externa ou mesmo um erro no Harbour.
Recentemente, andei fazendo muitos testes com ADO + Access (.mdb e .accdb) e Firebird. Mas como não usei variáveis STATIC, não tive problemas de GPF. Já no seu caso, o problema apareceu.
Parabéns pela atitude. Somente assim teremos um Harbour cada vez mais estável e robusto.
Alguém com GPF ao usar objetos?
Enviado: 02 Jan 2014 16:41
por Itamar M. Lins Jr.
2014-01-02 18:41 UTC+0100 Przemyslaw Czerpak (druzus/at/poczta.onet.pl)
* src/vm/hvm.c
* clear STATIC variables before releasing thread specific data.
It should resolve potential problems with code using TSD to activate
cleanup procedure and later cannot correctly execute pointer item
destructors, i.e. OLE subsystem.
best regards
Przemek
Alguém com GPF ao usar objetos?
Enviado: 02 Jan 2014 18:01
por JoséQuintas
Vi essa atualização de hoje.
Já baixei, testei e não tem mais GPF.