Interpretador de Codigo

Discussão em 'Progress 4GL' iniciado por Mokwa, Outubro 2, 2013.

  1. Mokwa

    Mokwa Membro Participativo

    Bom dia

    Estou tentando importar uma DLL de Interpretador de Código:

    Código:
    DEFINE VARIABLE ghCall   AS HANDLE     NO-UNDO.
    DEFINE VARIABLE cRetorno AS INTEGER    NO-UNDO.
    DEFINE VARIABLE cParam   AS CHARACTER  NO-UNDO.
    
       IF NOT VALID-HANDLE(ghCall) THEN      
          CREATE CALL ghCall.
    
       ASSIGN ghCall:LIBRARY               = 'C:\Users\Matheus\Interpretador\Eval\Eval\bin\Eval.dll'
              ghCall:CALL-NAME             = 'eval'
              ghCall:CALL-TYPE             = DLL-CALL-TYPE
              ghCall:NUM-PARAMETERS        = 1
              ghCall:RETURN-VALUE-DLL-TYPE = 'CHARACTER'.
    
       ASSIGN cparam = '1 + 1'.
    
       ghCall:SET-PARAMETER(1, 'CHARACTER', 'INPUT', cParam).
       ghCall:INVOKE.
    
       ASSIGN cRetorno = ghCall:RETURN-VALUE.
       
       ghCall:CLEAR().
    Porem me ocorre o seguinte erro:

    Aqui esta o código da DLL feita em C#.

    Código:
    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Web;
    using System.Runtime.InteropServices;
    using Eval4;
    using Eval;
    using RGiesecke.DllExport;
    
    namespace Eval
    {
        public static class Eval
        {
           static Eval4.Core.IParsedExpr mResult;
    
            [DllExport("eval", CallingConvention = CallingConvention.Cdecl)]
            public static String eval(String eval)
            {
                Eval4.MathEvaluator ev = new Eval4.MathEvaluator();
                mResult = ev.Parse(eval);
                return ev.ConvertToString(mResult.ObjectValue);
            }
        }
    }
    Alguém tem ideia de como solucionar esse problema, ou até mesmo se conhece alguma outra dll de interpretador de código que funcione com progress? Qualquer sugestão sera bem vinda.
  2. Mokwa

    Mokwa Membro Participativo

    Solucionado.

    desconbri que posso fazer pelo proprio progress.

    Código:
    cExpression = "IF 2 + 2 = 4 THEN YES ELSE NO".
    
    QUERY q:QUERY-PREPARE("FOR EACH tt WHERE DYNAMIC-FUNCTION('GetLogical', " + cExpression + ") = TRUE").
    QUERY q:QUERY-OPEN().
    QUERY q:QUERY-CLOSE.
    MESSAGE lResult VIEW-AS ALERT-BOX INFO BUTTONS OK.

Compartilhe esta Página