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 : Sélectionner tout - Visualiser dans une fenêtre à part
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 : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
 
[oracle@server1 ~]$ gcc -fPIC -c test.c
[oracle@server1 ~]$ gcc -shared -o test.so test.o

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
 
create or replace library c_test as '/home/oracle/test.so';
/

Code : Sélectionner tout - Visualiser dans une fenêtre à part
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 : Sélectionner tout - Visualiser dans une fenêtre à part
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 l’adresse 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