Bom dia! Estou com uma dúvida em relação a DLL´s. Assim como fazemos relatórios em Excel, onde manipulamos os eventos do mesmo, temos uma DLL que faz consultas a Receita federal. Onde devo colocar a DLL para que o progress entenda/interprete os comandos contidos na DLL ? Há algum diretório especifico ? Algo a ser configurado no Banco ?
Erick, Você não precisa de nada no banco de dados, porque todo o acesso às funções da DLL são executados pelo client. Normalmente as DLLs externas que uma aplicação carrega tem que estar no diretório do sistema (%SystemRoot%\system32) ou no diretório da aplicação. Neste caso a aplicação é o Progress, então %DLC%\bin. Não sei se o Progress irá procurar estas DLLs no PROPATH, penso que não. O PROPATH é para r-code. Para usar, você declara o que tem na DLL, com a palavra EXTERNAL. Exemplo do próprio manual: Código: 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.
Humm, legal... Esse exemplo que voce postou seria no caso de na dll haver uma função, aonde voce passando os valores atraves da procedures, ela é executada através do progress?
Sim, mas ali só está o código que está ali só "declara" a função ou rotina. Depois você tem que invocar, mas daí é igual a invocar uma procedure progress padrão: RUN Procedure Parâmetros. O difícil é conseguir a declaração e ajustar os tipos. Em muitos casos essas DLLs usam tipos que não tem um correspondente no Progress, daí tem que ficar ajustando... O mais fácil de testar é com as APIs do Windows, várias delas já tem documentação nos KBs da Progress...
Bem, meu dilema é um pouco mais complicado. O código que estou usando é: Código: CREATE "FuncaoRobo.clsAudicon" Audicon /* chFuncao */ . /* Instância da DLL */ ASSIGN strRetorno = Audicon:Pesquisar(strUf, strTipoPesquisa, strCnpjCpf, strInscricaoEstadual, strTipodeRetorno, strUsuario, strSenha). Porém, na pesquisa não me retorna nada, apenas a palavra "Timeout", padrão da função na DLL quando há falha na pesquisa. Porém, temos um aplicativo feito em C# que utiliza a mesma DLL que usamos no progress, e sempre nos retorna um resultado válido. Alguem sabe de algo que possa vir a solucionar isso?