Página 1 de 1

Saber os Métodos de um Objeto/Classe

Enviado: 07 Fev 2016 11:33
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 ?

Saber os Métodos de um Objeto/Classe

Enviado: 07 Fev 2016 19:59
por fladimir
Alguma função não sei, mas via DEBUG conseguimos ter acesso ao q não for HIDDEN ou PRIVATE.

Saber os Métodos de um Objeto/Classe

Enviado: 07 Fev 2016 20:22
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.

Saber os Métodos de um Objeto/Classe

Enviado: 07 Fev 2016 20:36
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

Saber os Métodos de um Objeto/Classe

Enviado: 07 Fev 2016 21:12
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

Saber os Métodos de um Objeto/Classe

Enviado: 07 Fev 2016 21:54
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.

Saber os Métodos de um Objeto/Classe

Enviado: 07 Fev 2016 22:10
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

Saber os Métodos de um Objeto/Classe

Enviado: 07 Fev 2016 22:51
por alxsts
Olá!

Veja se esta ferramenta te ajuda: Explorer Lib
ExplorerLiblibCOFFOMF

Saber os Métodos de um Objeto/Classe

Enviado: 08 Fev 2016 16:31
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


Saber os Métodos de um Objeto/Classe

Enviado: 08 Fev 2016 17:58
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?

Saber os Métodos de um Objeto/Classe

Enviado: 09 Fev 2016 17:41
por Claudio Soto
Hola Asimoes,
estas funciones solo listan las clases creadas por Harbour.