DLL desenvolvida pra framework

Discussão em 'Progress 4GL' iniciado por angeloata, Julho 10, 2009.

  1. angeloata

    angeloata Membro Participativo

    Estou tentando desenvolver a Nota Fiscal eletronica, com a dll nfe_util.dll, da FlexDocs, fiz todo o acesso a dll externa, mas qdo executo a DLL, ocorre o erro 3260 - Could not find th entrypoint versao. (3260).

    Li a documentação da progress, que talvez pudesse ser a possibilidade ser ser a questão se sensitive, fiz o teste com outras dll do tipo kernel e funcionam.

    A unica questão,q essa dll precisa do framework instalado 2.0, no qual esta instalado e registrado. Isso implica alguma coisa na quetão da utilização da biblioteca no progress?

    Inclusive rodei a aplicação em Delphi que vem como exemplo, e a aplicação executa sem problema algum.

    PROCEDURE Versao EXTERNAL "NFe_Util.dll":
    DEFINE RETURN PARAMETER retorno AS CHAR.
    END.

    PROCEDURE CarregaDLL:
    DEFINE VARIABLE vv_ThisDLL AS CHARACTER INITIAL "NFe_Util.dll" NO-UNDO.
    DEFINE VARIABLE vv_pDLL AS MEMPTR.

    SET-SIZE(vv_pDLL) = length(vv_ThisDLL) + 1.
    PUT-STRING(vv_pDLL,1) = vv_ThisDLL.
    RUN LoadLibraryA(vv_pDLL, OUTPUT v_hThisDLL).
    SET-SIZE(vv_pDLL) = 0.
    END.

    PROCEDURE DescarregaDLL:
    RUN FreeLibrary(v_hThisDLL).
    END.

    RUN carregaDLL.
    RUN versao(OUTPUT T_RETORNO_C).
    RUN Descarregadll.

    Att.
  2. Agnaldo

    Agnaldo Membro Ativo

    E não esqueça
    1) Registrar a DLL (regsvr32)
    2) A DLL (e acho que outras pastas dela) devem ser copiados para a PATH da aplicação. Na verdade, sugiro que copie ela lá pro DLC do Progress.

    Use o SPY do Protools para ver os nomes corretos dos metodos/objetos.

    Podes testar com algo assim.

    Código:
    DEFINE VARIABLE objetoNF AS COM-HANDLE.
    DEFINE VARIABLE versao   AS CHARACTER.
    
    CREATE "NFe_Util_PL005a.Util" objetoNF.   
    versao = objetoNF:Versao().
    MESSAGE versao VIEW-AS ALERT-BOX. 
    RELEASE OBJECT objetoNF.
    
  3. angeloata

    angeloata Membro Participativo

    Cara tentei fazer o q vc me disse mas ocorreram os seguintes problemas:

    ao registrar pelo regsvr32: NFe_Util.dll foi carregado, mas o ponto de entrada DLLRegisterServer não foi localizado. Este arquivo não pode ser registrado.

    E ao executar o exemplo passado: Ocorreu erro durante criação/conexão do servidor de automação para NFe_Util_pl005a.util.
    O sistema não pode encontrar o arquivo especificado. Codigo de erro 0x80070002 c:\windows\temp (5894)

    Tenho uma pergunta: como vc chegou no arquivo nfe_util_pl005a.util?

    Att
  4. Agnaldo

    Agnaldo Membro Ativo

    Voce leu o que eu escrevi antes.

    "Use o SPY do Protools para ver os nomes corretos dos metodos/objetos".

    Outra coisa.
    Na pasta da DLL (aquele .zip que voce baixou lá do Flexdocs), tem inclusive os o .bat para registrar a dll.
    Na dita pasta tens, além da .dll o arquivo .tlb da mesma.

    No Progress, no menu.
    Tools -> Pro*Tools
    Pegue o icone de "COM Object Viewer".

    Abra o arquivo NFe_Util.tlb.
    Vai mostrar os objetos que a DLL possui e a sintaxe a ser usada no Progress também.

    E lembre-se do comentario que fiz.
    Coloque a DLL na pasta DLC do Progress.
  5. angeloata

    angeloata Membro Participativo

    Cara desculpe-me a ignorancia, como não trabalho com DLL externa estou apanhando pra burro.

    Ja tinha registrado a DLL atraves do BAT, e não conhecia a opção do spy para verificar o TBL. as DLL e o TBL estão na mesma pasta do meu programa, que inclusive estão com o propath apontando essa pasta.

    So que mesmo assim ocorre o erro: acima mencionado. Verifiquei os nomes pelo spy e estão corretos.

    Se puder me ajudar agradeço...

    att.
  6. Agnaldo

    Agnaldo Membro Ativo

    Esse aqui ainda dá se tentar registrar usando o registrador deles?
    ao registrar pelo regsvr32: NFe_Util.dll foi carregado, mas o ponto de entrada DLLRegisterServer não foi localizado. Este arquivo não pode ser registrado.

    Esse aqui depende do registro e, também, de estar na path. De novo, copie a parte da dll para a pasta DLC do Progress.
    E ao executar o exemplo passado: Ocorreu erro durante criação/conexão do servidor de automação para NFe_Util_pl005a.util.
    O sistema não pode encontrar o arquivo especificado. Codigo de erro 0x80070002 c:\windows\temp (5894)

Compartilhe esta Página