DLL C# no Progress

Discussão em 'Progress 4GL' iniciado por wellington, Junho 29, 2011.

  1. wellington

    wellington Membro Participativo

    MEU CÓDIGO PROGRESS
    Código:
    def var myretorno as CHARACTER.
    run Teste(output myretorno).
    
    MESSAGE myretorno
        VIEW-AS ALERT-BOX INFO BUTTONS OK.
    
    procedure Teste external "C:\MyDLL.dll":    
        def OUTPUT parameter retorn  as CHARACTER.
    end.
    
    abaixo segue a estrutura da minha simples dll

    Código:
    using System;
    using System.Collections.Generic;
    using System.Text;
    
    
        public class Seguranca
        {
                   
            public string Teste()
            {
                return "Retornou Teste";
            }
        }
    
    Alguem poderia me dar um help?
  2. romuloccomp

    romuloccomp Membro Participativo

    Olá,

    Acho que ele não está encontrando a classe segurança, tente deixar-la como construtor.

    E segue abaixo um exemplo pra ajudar:

    Código:
    DEFINE VARIABLE resulto AS INTEGER.
    
    MESSAGE "  Janela com o message do progress"
      VIEW-AS 
        ALERT-BOX MESSAGE
        BUTTONS OK
        TITLE "ABL Message".
    
    RUN MessageBoxA (0, "  Janela com o message do win :)",
      "ABL DLL Access", 0, OUTPUT resulto).
    
    PROCEDURE MessageBoxA EXTERNAL "user32.dll":
      DEFINE INPUT PARAMETER hwnd AS LONG.
      DEFINE INPUT PARAMETER mbtext AS CHARACTER.
      DEFINE INPUT PARAMETER mbtitle AS CHARACTER.
      DEFINE INPUT PARAMETER style AS LONG.
      DEFINE RETURN PARAMETER result AS LONG.
    END.
  3. kirchner

    kirchner Membro Participativo Moderador

    wellington,

    Se você mandar o erro é melhor. Mas eu suponho que o problema seja teu código progress. Quando você declara uma procedure como EXTERNAL, está dizendo que o código dela está em alguma biblioteca nativa, com uma entrada para a função na tabela de símbolos.

    Ocorre que código .NET não gera uma biblioteca nativa, mas sim uma assembly. Esse código precisa do runtime do .NET para funcionar, do Jitter, BCL, GC e tudo mais. Você pode carregar isso manualmente (não recomendo) ou usa a interoperabilidade COM para fazer o trabalho pesado. Você deve marcar a classe como COMVisible, strong-name, registrar, e depois chamar no progress como COM-HANDLE.
    Não é trivial mas funciona bem.

Compartilhe esta Página