Utilisation de DLL développée en C

regdobey Messages postés 9 Date d'inscription mardi 4 mars 2003 Statut Membre Dernière intervention 1 novembre 2003 - 1 nov. 2003 à 19:58
gg00xiv Messages postés 656 Date d'inscription mercredi 22 août 2001 Statut Membre Dernière intervention 11 mars 2005 - 2 nov. 2003 à 20:02
Bonjour,

j'ai du mal à utiliser une DLL (win32).

Le prototype de la fonction que j'appelle est :
int** allocation(int** r, int colonne, int ligne)

En fait, c'est du calcul matriciel, je passe une matrice (r) et ses dimensions. En retour, j'ai une autre matrice.

Dans mon code C#, je fias ceci :
[DllImport("MetHongroise.dll", EntryPoint="allocation", SetLastError=true, CharSet=CharSet.Unicode, ExactSpelling=true, CallingConvention=CallingConvention.StdCall)]
public static extern int[,] allocation(ref int[,] r, int n);

Mais là, probleme. j'arrive pas à faire marcher ça. Surtout sur le retour ...

Quelqu'un peut m'aider ??

Merci

2 réponses

regdobey Messages postés 9 Date d'inscription mardi 4 mars 2003 Statut Membre Dernière intervention 1 novembre 2003
1 nov. 2003 à 20:19
une petite précision : oui je me suis trompé en copiant mon c#. c'est bien :

[DllImport("MetHongroise.dll", EntryPoint="allocation", SetLastError=true, CharSet=CharSet.Unicode, ExactSpelling=true, CallingConvention=CallingConvention.StdCall)]
public static extern int** allocation(ref int[,] r, int colonne, int ligne)

De plus, j'arrive à faire fonctionner mon prog en unsafe, mais mon but est de le faire tourner en safe.

merci d'avance
0
gg00xiv Messages postés 656 Date d'inscription mercredi 22 août 2001 Statut Membre Dernière intervention 11 mars 2005 13
2 nov. 2003 à 20:02
int* p;
int **p;
int ********************p;

tout ces pointeurs se représentent en code managé par un seul et unique type : IntPtr (et oui toutes se variables sont des pointeurs).

ensuite, tu va devoir utiliser les fonction de la classe Marshal (System.Runtime.InteropServices) pour tout ce qui est transfert de données entre mémoire non managée et mémoire managée.

exple : Marshal.SizeOf, Marshal.PtrToStructure, etc ...

je te conseille donc de lire la doc du kit de developpement .NET framework installée avec ce dernier pour utiliser au mieux ces fonctions dans ton exemple.

PS: le type int[,] et en réalité le type Array qui na rien a voir avec un int** :)

[Membre du laboratoire .NET de SUPINFO]
0
Rejoignez-nous