Morgan_2956
Messages postés16Date d'inscriptionlundi 11 décembre 2006StatutMembreDernière intervention 4 février 2010
-
4 févr. 2010 à 14:11
Morgan_2956
Messages postés16Date d'inscriptionlundi 11 décembre 2006StatutMembreDernière intervention 4 février 2010
-
4 févr. 2010 à 19:18
Bonjour à tous,
Malgré toutes mes recherches et essais, je n'arrive décidément pas à passer des tableaux dans une structure provenant d'une dll.
Je dois utiliser une dll contenant une fonction qui renvoie une structure qui contient des tableau de int, byte,...
Pour débuter dans le code non managé, j'ai créé une dll de test avec un premier exemple qui de structure simple sans tableau. Dans ce cas pas de problème cela fonctionne bien.
La ou ca coince, c'est avec des tableaux!!!
Voici comment elle déclarée la fonction en C:
typedef struct DLLStrucure
{
uint8 Valeur1[4];
} DLLStrucure ;
fonction C utilisée:
DLLStrucure DLL_EXPORT FunctionStruct()
Dans mon programme c#:
[StructLayout(LayoutKind.Sequential)]
public class MyStruct
{
[MarshalAs(UnmanagedType.ByValArray, SizeConst = 4, ArraySubType = UnmanagedType.U1)]
public byte[] Valeur1;
public MyStruct()
{
this.Valeur1 = new byte[4];
}
}
voici comment je déclare et appel la fonction de la dll:
MyStruct TestStruct2 = new MyStruct();
TestStruct2 = FunctionStruct();
et la j'ai l'erreur "Tentative de lecture ou d'écriture de mémoire protégée. Cela indique souvent qu'une autre mémoire est endommagée."
Si quelqu'un peut m'aider, je le remercie par avance.
Lutinore
Messages postés3246Date d'inscriptionlundi 25 avril 2005StatutMembreDernière intervention27 octobre 201241 4 févr. 2010 à 15:26
Salut, la défintion est correcte c'est d'utiliser une structure qui contient un tableau comme type de retour qui pose problème, je ne pense pas qu'initialiser le tableau avant l'appel change quelque chose (à voir). La structure est minimaliste, remplace le tableau par 4 bytes.
Morgan_2956
Messages postés16Date d'inscriptionlundi 11 décembre 2006StatutMembreDernière intervention 4 février 2010 4 févr. 2010 à 15:37
Merci de ta réponse, mais en fait je travail par étape, puisqu'au final je doit récupérer une structure bien plus grosse avec des tableaux de float, uint8, uint16, int8, ...
Donc pour le moment j'essaye avec une structure de test contenant un tableau simple.
Mais je comprend pas pourquoi utiliser une structure qui contient un tableau comme type de retour qui pose problème! puisse que la taille du tableau est connu!
Ca doit quand même être possible !!
Vous n’avez pas trouvé la réponse que vous recherchez ?
Lutinore
Messages postés3246Date d'inscriptionlundi 25 avril 2005StatutMembreDernière intervention27 octobre 201241 4 févr. 2010 à 16:28
Renvoyer par valeur une structure qui contient des tableaux inline c pas bien et c'est lent, il serait plus correct de demander à l'utilisateur d'allouer sa structure et de la passer en paramètre.
Morgan_2956
Messages postés16Date d'inscriptionlundi 11 décembre 2006StatutMembreDernière intervention 4 février 2010 4 févr. 2010 à 18:09
en code unsafe ca passe!! merci!
En revanche je viens lire cette structure dans la dll à 25Hz, donc si cette methode est longue, il serait préférable de changer de solution. Pour cela il faut que mon fournisseur de la dll veuille bien faire la modif!
omment on peut allouer la structure et la passer en paramètre? Aurais tu un exemple?