Muito obrigado Chiappa.
jlchiappa [EMAIL PROTECTED] escreveu: Bem, não sou especialista em DLLs, só
as usei um pouco pra chamar
APIs prontas, , mas uma coisa que normalmente vejo é o tipo integer
ser mapeado nos arqs da função como BINARY_INTEGER, e não como
PL_INTEGER. A declaração em si da DLl numa passada superficial me
parece correta...
O que eu te sugiro é : ** antes de tudo **, siga o setup recomendado
no manual citado (na SUA versão de banco!), pra testar faça uma
external chamando uma dll ** do sistema operacional **, por exemplo
como mostrado em
http://asktom.oracle.com/pls/ask/f?p=4950:8:F4950_P8_DISPLAYID:21419917814146
e em
http://asktom.oracle.com/pls/ask/f?p=4950:8:F4950_P8_DISPLAYID:2450510349959
(pois aí se vc tiver problemas outras pessoas da lista podem tentar
reproduzir), e só então, com ambiente testado e ok, aí sim vá tentar
chamar essa dll , que pelo que vejo é específica dum fornecedor...
Em
http://asktom.oracle.com/pls/ask/f?p=4950:8:F4950_P8_DISPLAYID:9087161189226
,
http://asktom.oracle.com/pls/ask/f?p=4950:8:F4950_P8_DISPLAYID:934029542973
e
http://asktom.oracle.com/pls/ask/f?p=4950:8:F4950_P8_DISPLAYID:1200435685237
há exemplos chamando DLLs com cabeçalho padrão linguagem C e afora a
questão dos datatypes são basicamente idênticas ao que vc mostrou.
[]s
Chiappa
--- Em oracle_br@yahoogrupos.com.br, Mauricio Françoso
[EMAIL PROTECTED] escreveu
Chiappa,
Este é o metodo na DLL: (Prototipo da Funcao)
extern C __declspec(dllexport) int __stdcall
ExecInClientDLL(intID, const char * Parameters, char * Buffer, int Size)
---
Minha duvida é: Para chamar a funcao acima os datatypes da Proc
estao corretos ? Da uma olhada abaixo:
CREATE OR REPLACE PROCEDURE LDAPlps (
IN_ID IN PLS_INTEGER,
IN_PARAM IN VARCHAR2,
OUT_BUFFER OUT VARCHAR2,
IN_SIZE IN PLS_INTEGER)
AS LANGUAGE C
LIBRARY ldap_microsiga
NAME ExecInClientDLL
PARAMETERS (
IN_ID INT ,
IN_PARAM STRING,
OUT_BUFFER BY REFERENCE STRING,
IN_SIZEINT);
[]s
Mauricio
jlchiappa [EMAIL PROTECTED] escreveu:
No banco 8i vc está tentando seguir as instruções do 10g, não é meio
estranho isso, deveria ser o manual Oracle8i Application Developer's
Guide - Fundamentals, cap. 10 - External Routines, online em
http://www.oracle.com/technology/documentation/oracle8i.html.
Nesse cara é especificado que vc tem que fazer alterações no
listener, vc as fez ? parou e subiu o listener de novo após isso ?
sqlnet não é listado, afaik, no documento como sendo necessário
altera (a ref é 1. Set Up the Environment
Your DBA sets up the environment for calling external routines by
adding entries to the files tnsname.ora and listener.ora and by
starting a Listener process exclusively for external routines.
, exatamente O QUE vc alterou nele ??
[]s
Chiappa
--- Em oracle_br@yahoogrupos.com.br, mfrancoso [EMAIL PROTECTED]
escreveu
SO = windows 2000
ORACLE 8.1.7.4.0
Pessoal,
Estou tentando executar uma external procedure mas não estou
obtendo
exito:
Seguem os passos executado.
Esse é o link dos datatypes
http://www.oracle-
10g.de/oracle_10g_documentation/appdev.101/b10795/adfns_ex.htm#1021379
PARAMETROS DO METODO NA DLL
extern C __declspec(dllexport) int __stdcall ExecInClientDLL(int
ID, const char * Parameters, char * Buffer, int Size)
CRIACAO DA LIBRARY PARA A EXTERNAL PROCEDURE
CREATE OR REPLACE LIBRARY ldap_microsiga
AS 'C:\Component_dlls\LDAP\DllProtheus.dll';
CRIACAO DA STORED PROCEDURE MAPEANDO PARA A FUNCAO NA DLL
CREATE OR REPLACE PROCEDURE LDAPlps (
IN_ID IN PLS_INTEGER,
IN_PARAM IN VARCHAR2,
OUT_BUFFER OUT VARCHAR2,
IN_SIZE IN PLS_INTEGER)
AS LANGUAGE C
LIBRARY ldap_microsiga
NAME ExecInClientDLL
PARAMETERS (
IN_ID INT ,
IN_PARAM STRING,
OUT_BUFFER BY REFERENCE STRING,
IN_SIZEINT);
SCRIPT CHAMANDO NO SQL*PLUS
DECLARE
v_IN_IDPLS_INTEGER:=1;
v_IN_PARAM VARCHAR2(100):='mic1|-|[EMAIL PROTECTED]|-|MICROSIGA|-
|C:\Component_dlls\LDAP\MICROSIGA|-|[EMAIL PROTECTED]';
v_OUT_BUFFER VARCHAR2(100);
v_IN_SIZEPLS_INTEGER:=50;
BEGIN
LDAPlps(v_IN_ID, v_IN_PARAM, v_OUT_BUFFER, v_IN_SIZE);
DBMS_OUTPUT.PUT_LINE('free disk space, megabytes = ' ||
v_OUT_BUFFER);
END;
Chamando a DLL por um EXE dá ok.
Chamando pelo Oracle dá o erro abaixo:
ORA-28576: lost RPC connection to external procedure agent
O tnsnames ,sqlnet e o listener já foram configurados e estão ok
mas continuo recebendo o erro acima.
obrigado.