Executar função de COM DLL

Discussão em 'Progress 4GL' iniciado por af.dums, Julho 26, 2011.

  1. af.dums

    af.dums Membro Ativo

    Bom dia...

    Tenho uma DLL criada em C# .NET, mas não estou conseguindo executa-la, ela não é registravel e quando executo código abaixo me retorna o erro "Could not find entrypoint _Concatena@12. (3260)"

    Alguém tem idéia do que seja e de como posso corrigir?

    Obrigado.

    Abraços...
    Código:
    
    PROCEDURE Concatena EXTERNAL "DLLTuper.dll":
        DEF INPUT PARAM i-param-1 AS LONG.
        DEF INPUT PARAM c-param-2 AS CHAR.
        DEF INPUT PARAM c-param-3 AS CHAR.
        DEF RETURN PARAM c-retorno AS CHAR.
    END PROCEDURE.
    
    DEF VAR c-retorno AS CHAR NO-UNDO.
    
    RUN Concatena(INPUT 1,
                  INPUT "teste2",
                  INPUT "teste3",
                  OUTPUT c-retorno).
    
    
  2. kirchner

    kirchner Membro Participativo Moderador

    Anderson,

    Declarar uma procedure como EXTERNAL funciona quando é uma biblioteca tradicional, código nativo (C/C++/Delphi deve funcionar também/etc).

    O .NET gera managed code, que só roda no CLR. Não são DLLs padrão, são assemblies.
    A alternativa é assinalar teu método como COM, strong-name e registrar. Daí você instancia como COM-HANDLE.
  3. af.dums

    af.dums Membro Ativo

    Obrigado pelo retorno.

    Instacio estilo
    Código:
    create "DLLTuper" ch-teste
    Obrigado.
  4. kirchner

    kirchner Membro Participativo Moderador

    Então, eu usava assim em um sistema que eu tinha:
    Código:
    DEF VAR HooksObject AS COM-HANDLE NO-UNDO.
    CREATE "XPTO.KeyboardHooks" HooksObject.
    HooksObject:DefineKey(HookShortcut).
    HooksObject:SetVisible(TRUE).
    HooksObject:DefineHandle(hdlParent).
    HooksObject:InstallHooks().
    Esse código tá aposentado agora. Mas funcionou por alguns anos.
  5. af.dums

    af.dums Membro Ativo

    Deu boa Marcos, segue código que usei para o teste.

    Depois vou postar uma manualzinho de como fazer todo o processo, desde a criação da DLL até a instância dela.

    Obrigado pela ajuda.

    Abraços...
    Código:
    DEF VAR ch-teste AS COM-HANDLE NO-UNDO.
    
    DEF VAR c-retorno AS CHAR NO-UNDO.
    
    CREATE "RFID.RFIDBobina.Imprimir" ch-teste.
    
    ASSIGN c-retorno = ch-teste:retornaConcatenado(INPUT "teste2",
                                                   INPUT "teste3").
    
    MESSAGE c-retorno
        VIEW-AS ALERT-BOX INFO BUTTONS OK.
    
    
  6. af.dums

    af.dums Membro Ativo

Compartilhe esta Página