Récupération pointeur d'une extproc C depuis PL/SQL
Hello,
Je cherche a faire la chose suivante, cela pourra certainement sembler bizarre mais bon, j'expliquerai plus tard le but:-)
Voici le test case:
J'ai un module en c sous linux
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24
|
#include <stdio.h>
int gValue = 0;
void setval(int val)
{
gValue = val;
}
int getval(void)
{
return (gValue);
}
int *getadrval(void)
{
return &gValue;
}
int getvalfromadr (int *adr)
{
return (*adr);
} |
Compilation
Code:
1 2 3
|
[oracle@server1 ~]$ gcc -fPIC -c test.c
[oracle@server1 ~]$ gcc -shared -o test.so test.o |
Code:
1 2 3
|
create or replace library c_test as '/home/oracle/test.so';
/ |
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32
|
create or replace procedure setval(val int) is
external
library sys.c_test
name "setval"
language C
calling standard C;
/
create or replace function getval return int is
external
library sys.c_test
name "getval"
language C
calling standard C;
/
create or replace function getvalfromadr (adr XXXX) return int is
external
library sys.c_test
name "getvalfromadr"
language C
calling standard C;
/
create or replace function getadrval return XXXX is
external
library sys.c_test
name "getadrval"
language C
calling standard C;
/ |
Traitement souhaité:
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
|
set serveroutput on
declare
rc pls_integer;
adr binary_integer;
begin
setval (10); -- affectation de la valeur 10
rc := getval; -- récupération de l avaleur
dbms_output.put_line( 'rc='||rc);
adr := getadrval; -- récupération de ladresse de la variable globale
rc := getvalfromadr (adr);-- récupération de la valeur à l'adresse de la variable globale
dbms_output.put_line( 'rc='||rc);
end;
/ |
Je n'arrive pas à récupérer le pointeur int*.
Problème de typage?
Merci de votre aide
jko