Saber os Métodos de um Objeto/Classe

Projeto [x]Harbour - Compilador de código aberto compatível com o Clipper.

Moderador: Moderadores

Avatar do usuário
asimoes
Colaborador
Colaborador
Mensagens: 4919
Registrado em: 26 Abr 2007 16:48
Localização: RIO DE JANEIRO-RJ

Saber os Métodos de um Objeto/Classe

Mensagem por asimoes »

Pessoal,

Tem como no harbour saber os métodos de um objeto exemplo oWebService := Win_OleCreateObject("MSXML2.ServerXMLHTTP"), tem como listar os métodos do objeto MSXML2.ServerXMLHTTP ? sem ter que ir procurar o google ou página de pesquisa?

E de uma classe exemploe:

oPdf := PdfPrintClass():New()

Quais os métodos da classe PdfPrintClass ?
►Harbour 3.x | Minigui xx-x | HwGui◄
Pense nas possibilidades abstraia as dificuldades.
Não corrigir nossas falhas é o mesmo que cometer novos erros.
A imaginação é mais importante que o conhecimento. (Albert Einstein)
Avatar do usuário
fladimir
Colaborador
Colaborador
Mensagens: 2445
Registrado em: 15 Nov 2006 20:21

Saber os Métodos de um Objeto/Classe

Mensagem por fladimir »

Alguma função não sei, mas via DEBUG conseguimos ter acesso ao q não for HIDDEN ou PRIVATE.
Sun Tzu há mais de três mil anos cita nas epígrafes de seu livro “A Arte da Guerra“:

“Concentre-se nos pontos fortes, reconheça as fraquezas, agarre as oportunidades e proteja-se contra as ameaças”.
“Se não é vantajoso, nunca envie suas tropas; se não lhe rende ganhos, nunca utilize seus homens; se não é uma situação perigosa, nunca lute uma batalha precipitada”
.


Até 2017    Desktop Console [ Legado ] Harbour | MinGW | DBF | CDX | FastReport | MySQL


Novos Projetos:

   Desktop Visual           Windev Desktop
   Celular Android/iOS   Windev Mobile
   WEB                            Windev Web


Sejamos gratos a Deus.
Avatar do usuário
JoséQuintas
Administrador
Administrador
Mensagens: 20267
Registrado em: 26 Fev 2007 11:59
Localização: São Paulo-SP

Saber os Métodos de um Objeto/Classe

Mensagem por JoséQuintas »

Tem função pra isso sim, pelo menos pra classes criadas pelo Harbour.
Só não sei dizer qual é, e pesquisar isso na internet é difícil.

Para outras classes, não sei se a mesma coisa serve.
Em último caso uso a IDE do VB6, que tem isso.
José M. C. Quintas
Harbour 3.2, mingw, gtwvg mt, fivewin 25.04, multithread, dbfcdx, MySQL, ADOClass, PDFClass, SefazClass, (hwgui mt), (hmg3), (hmg extended), (oohg), PNotepad, ASP, stored procedure, stored function, Linux (Flagship/harbour 3.2)
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"

https://github.com/JoseQuintas/
Avatar do usuário
asimoes
Colaborador
Colaborador
Mensagens: 4919
Registrado em: 26 Abr 2007 16:48
Localização: RIO DE JANEIRO-RJ

Saber os Métodos de um Objeto/Classe

Mensagem por asimoes »

Quintas,

Seria legal agente ter isso no fórum, montar um banco de informações dos recursos que o harbour pode obter.
Iria ajudar muitos.
Como não temos uma ide iagual c#, delphi temos que descobrir na internet como os métodos de um objetos funcionam e quais valores de set/get passar
►Harbour 3.x | Minigui xx-x | HwGui◄
Pense nas possibilidades abstraia as dificuldades.
Não corrigir nossas falhas é o mesmo que cometer novos erros.
A imaginação é mais importante que o conhecimento. (Albert Einstein)
Avatar do usuário
JoséQuintas
Administrador
Administrador
Mensagens: 20267
Registrado em: 26 Fev 2007 11:59
Localização: São Paulo-SP

Saber os Métodos de um Objeto/Classe

Mensagem por JoséQuintas »

Por coincidência, comentários recentes na hbnfe:

Código: Selecionar todos

CreateObject( "ServerXMLHTTP" )

Código: Selecionar todos

CreateObject( "ServerXMLHTTP.6.0" )
Eis que surge

Código: Selecionar todos

CreateObject( "Msxml2.ServerXMLHTTP.6.0" )
https://msdn.microsoft.com/pt-br/librar ... s.85).aspx
José M. C. Quintas
Harbour 3.2, mingw, gtwvg mt, fivewin 25.04, multithread, dbfcdx, MySQL, ADOClass, PDFClass, SefazClass, (hwgui mt), (hmg3), (hmg extended), (oohg), PNotepad, ASP, stored procedure, stored function, Linux (Flagship/harbour 3.2)
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"

https://github.com/JoseQuintas/
Avatar do usuário
JoséQuintas
Administrador
Administrador
Mensagens: 20267
Registrado em: 26 Fev 2007 11:59
Localização: São Paulo-SP

Saber os Métodos de um Objeto/Classe

Mensagem por JoséQuintas »

E referenciando o XML 6. 0, mostra como sendo parte de MSXML2
Ainda não sei se isso poderia resolver o problema de diferença entre Harbour/xHarbour.
vb6.png
No Vb6 acaba aparecendo um mini-manual, mas não sei se isso depende de alguma outra coisa.
Com certeza o XML 6.0 não é do tempo do VB6, veio depois.
José M. C. Quintas
Harbour 3.2, mingw, gtwvg mt, fivewin 25.04, multithread, dbfcdx, MySQL, ADOClass, PDFClass, SefazClass, (hwgui mt), (hmg3), (hmg extended), (oohg), PNotepad, ASP, stored procedure, stored function, Linux (Flagship/harbour 3.2)
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"

https://github.com/JoseQuintas/
Avatar do usuário
JoséQuintas
Administrador
Administrador
Mensagens: 20267
Registrado em: 26 Fev 2007 11:59
Localização: São Paulo-SP

Saber os Métodos de um Objeto/Classe

Mensagem por JoséQuintas »

O meu VB6 é pirata, conforme recomendado pelo suporte da Microsoft.

Tenho licença pro VB.NET, que dá direito ao VB6. O suporte da Microsoft realmente disse isso pra mim, do pirata, pois eles não tinham mais oficial pra mandar.
Naquela época não existiam as versões Express grátis, mas custou muuuito mais barato do que qualquer produtinho xBase.

Aliás isso sempre foi uma parte chata:
Qualquer porcaria que fazem pro xBase custa caro, mesmo as coisas grátis pra outras linguagens.
Até usar DBF em VB6 era grátis, com direito a comandos SQL inclusive.

Talvez tenha algo parecido no compilador C, que usamos pra compilar o Harbour e fontes em geral, pra isso de DLLs.
Se fizerem pro Harbour, provavelmente vão cobrar.

Não sei se com isso do Visual Studio grátis, se dá direito ao VB6 grátis também.
Na época que comprei foi 5 pagamentos de 100 reais, acho que até na época foi mais barato que comprar um Windows.
Nessa mesma época, acho que o xHarbour custava uns 5.000 reais, não tinha IDE, e dependia de assinatura pra atualizar.
Até hoje ainda não tem recursos que o VB6 tinha.... rs
José M. C. Quintas
Harbour 3.2, mingw, gtwvg mt, fivewin 25.04, multithread, dbfcdx, MySQL, ADOClass, PDFClass, SefazClass, (hwgui mt), (hmg3), (hmg extended), (oohg), PNotepad, ASP, stored procedure, stored function, Linux (Flagship/harbour 3.2)
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"

https://github.com/JoseQuintas/
alxsts
Colaborador
Colaborador
Mensagens: 3092
Registrado em: 12 Ago 2008 15:50
Localização: São Paulo-SP-Brasil

Saber os Métodos de um Objeto/Classe

Mensagem por alxsts »

Olá!

Veja se esta ferramenta te ajuda: Explorer Lib
ExplorerLiblibCOFFOMF
[]´s
Alexandre Santos (AlxSts)
Claudio Soto
Colaborador
Colaborador
Mensagens: 566
Registrado em: 27 Ago 2012 12:31
Localização: Uruguay
Contato:

Saber os Métodos de um Objeto/Classe

Mensagem por Claudio Soto »

Estas son unas funciones de HMG Debugger para listar los métodos y valores de los objectos, están incluidas en la carpeta de HMG Oficial c:\hmg.3.4.2\source\debugger\dbgHB.prg

Pueden ser fácilmente adaptables, espero que les sea útil.

Usar así:

Código: Selecionar todos

LOCAL aItems, cVarName, xVarValue, aObjRawValue
cVarName := "oMiVar"
xVarValue := oMiVar
aItems := HMG_Debugger():GetObjectInfo( cVarName, xVarValue, @aObjRawValue )

Código: Selecionar todos


METHOD GetObjectInfo( cObjName, oObject, aObjRawValue ) CLASS HMGDebugger
LOCAL aVars, aMethods, i 
LOCAL xValue, cValType, cValue
LOCAL arr := {}
   #define _OBJ_SEP_   ":"
   aObjRawValue := {}
   IF ValType( oObject ) != "O"
      ::GUIMessageBox( "GetObjectInfo: Invalid data type ( ValType: " + ValType( oObject ) + " )" )   // GUI: message box info
   ELSE
      aVars := __objGetMsgList( oObject )   // create list of object messages
      aMethods := __objGetMethodList( oObject )   // create list of object method
      FOR i := 1 TO Len( aVars )
         xValue := __dbgObjGetValue( oObject, aVars[i] )
         cValType := Valtype( xValue )
         cValue := __dbgValToStr( xValue )
         IF Len( cValue ) > VAR_MAX_LEN
            cValue := Left( cValue, VAR_MAX_LEN )
         ENDIF
         AAdd( arr, { cObjName + _OBJ_SEP_ + aVars[i], cValType, cValue } )
         AAdd( aObjRawValue, xValue )
      NEXT
      FOR i := 1 TO Len( aMethods )
         AAdd( arr, { cObjName + _OBJ_SEP_ + aMethods[ i ], "", "Method" } )
         AAdd( aObjRawValue, NIL )
      NEXT
   ENDIF
RETURN arr



FUNCTION __dbgValToStr( uVal )

   LOCAL cType := ValType( uVal ), i, s, nLen

   DO CASE
   CASE uVal == NIL  ; RETURN "NIL"
   CASE cType == "B" ; RETURN "{|| ... }"
   CASE cType == "A" 
      s := ""
      nLen := Min( 8, Len( uVal ) )
      FOR i := 1 TO nLen
         s += '"' + Valtype( uVal[i] ) + '"' + Iif( i==nLen, "", ", " )
      NEXT
      IF nLen < Len( uVal )
         s += ", ..."
      ENDIF
      RETURN "Array(" + hb_ntos( Len( uVal ) ) + "): { " + s + " }"
   CASE cType $ "CM" ; RETURN '"' + uVal + '"'
   CASE cType == "L" ; RETURN Iif( uVal, ".T.", ".F." )
   CASE cType == "D" ; RETURN DToC( uVal )
   CASE cType == "T" ; RETURN hb_TToC( uVal )
   CASE cType == "N" ; RETURN Str( uVal )
   CASE cType == "O" ; RETURN "Class " + uVal:ClassName() + " object"
   CASE cType == "H" ; RETURN "Hash(" + hb_ntos( Len( uVal ) ) + ")"
   CASE cType == "P" ; RETURN "Pointer"
   ENDCASE

   RETURN "U"


STATIC FUNCTION __dbgObjGetValue( oObject, cVar, lCanAcc )

   LOCAL xResult
   LOCAL oErr

   IFFAIL( NIL )
   BEGIN SEQUENCE WITH {|| Break() }
      xResult := __dbgSENDMSG( t_oDebugger:nProcLevel, oObject, cVar )
      lCanAcc := .T.
   RECOVER
      BEGIN SEQUENCE WITH {| oErr | Break( oErr ) }
         /* Try to access variables using class code level */
         xResult := __dbgSENDMSG( 0, oObject, cVar )
         lCanAcc := .T.
      RECOVER USING oErr
         xResult := oErr:description
         lCanAcc := .F.
      END SEQUENCE
   END SEQUENCE

   RETURN xResult

Saludos.
Dr. Claudio Soto
(Uruguay)
http://srvet.blogspot.com
Avatar do usuário
asimoes
Colaborador
Colaborador
Mensagens: 4919
Registrado em: 26 Abr 2007 16:48
Localização: RIO DE JANEIRO-RJ

Saber os Métodos de um Objeto/Classe

Mensagem por asimoes »

Olá Dr. Claudio,

Obrigado por compartilhar conosco, esta função funciona no exemplo: win_OleCreateObject("WScript.Shell") ? ou só objetos criados pelo harbour?
►Harbour 3.x | Minigui xx-x | HwGui◄
Pense nas possibilidades abstraia as dificuldades.
Não corrigir nossas falhas é o mesmo que cometer novos erros.
A imaginação é mais importante que o conhecimento. (Albert Einstein)
Claudio Soto
Colaborador
Colaborador
Mensagens: 566
Registrado em: 27 Ago 2012 12:31
Localização: Uruguay
Contato:

Saber os Métodos de um Objeto/Classe

Mensagem por Claudio Soto »

Hola Asimoes,
estas funciones solo listan las clases creadas por Harbour.
Saludos.
Dr. Claudio Soto
(Uruguay)
http://srvet.blogspot.com
Responder