Função DLL Retorna Array

Discussão em 'Progress 4GL' iniciado por willians.ambrosio, Setembro 11, 2015.

  1. willians.ambrosio

    willians.ambrosio Sem Pontuação

    Alguém já fez um programa que chama uma dll que retorna um array?
    Tentei acessar da seguinte maneira, porém o mesmo dá erro, já tentei receber somente em character sem o extent mais o erro é o mesmo.

    FUNCTION mt_connectlist RETURNS CHARACTER EXTENT 255:

    DEF VAR iValue AS CHARACTER EXTENT 255 NO-UNDO.
    DEF VAR hCall AS HANDLE NO-UNDO.

    CREATE CALL hCall.
    ASSIGN hCall:CALL-NAME = "mt_connectlist"
    hCall:LIBRARY = "c:\temp\pmtg.dll"
    hCall:CALL-TYPE = DLL-CALL-TYPE
    hCall:RETURN-VALUE-DLL-TYPE = "CHARACTER"
    hCall:NUM-PARAMETERS = 0.

    hCall:INVOKE().
    iValue = hCall:RETURN-VALUE.

    DELETE OBJECT hCall.

    RETURN iValue.

    END FUNCTION.

    DEFINE VARIABLE charout AS CHARACTER EXTENT 255 NO-UNDO.

    ASSIGN charout = mt_connectlist().

    MESSAGE charout[1]
    VIEW-AS ALERT-BOX INFO BUTTONS OK.
  2. bootstrapmaster

    bootstrapmaster Moderator Moderador Equipe de Suporte

    o seu charout, ele não é um campo tipo character separado por virgula ou coisa do tipo ? dai vc recebe ela bruta e depois vc transforma.
  3. willians.ambrosio

    willians.ambrosio Sem Pontuação

    bootstrapmaster já tentei assim e não dá certo.
    Existe um na linguagem Java um tipo TTABSOCK, o problema esta ai como definir a variavel no progress que pode receber esse cara?
  4. willians.ambrosio

    willians.ambrosio Sem Pontuação

    /*Essa função resolveu o problema*/
    FUNCTION mt_connectlist RETURNS INTEGER EXTENT 255 ():

    DEF VAR iValue AS INTEGER NO-UNDO.
    DEF VAR hCall AS HANDLE NO-UNDO.
    DEFINE VARIABLE cReturnGet AS INTEGER EXTENT 255 NO-UNDO.

    CREATE CALL hCall.
    ASSIGN hCall:CALL-NAME = "mt_connectlist"
    hCall:LIBRARY = SEARCH("dll\pmtg.dll")
    hCall:CALL-TYPE = DLL-CALL-TYPE
    hCall:RETURN-VALUE-DLL-TYPE = "LONG"
    hCall:NUM-PARAMETERS = 1.

    hCall:SET-PARAMETER(1, "LONG", "OUTPUT", cReturnGet).


    hCall:INVOKE().
    iValue = hCall:RETURN-VALUE.

    DELETE OBJECT hCall.

    RETURN cReturnGet.

    END FUNCTION.

Compartilhe esta Página