Pbs avec des pointeurs

z_san Messages postés 80 Date d'inscription jeudi 2 février 2006 Statut Membre Dernière intervention 24 mai 2007 - 27 mars 2006 à 20:09
z_san Messages postés 80 Date d'inscription jeudi 2 février 2006 Statut Membre Dernière intervention 24 mai 2007 - 28 mars 2006 à 10:29
Bonjour à tous

Voilà j'ai un ptit soucis avec des pointeurs, voilà je développe une dll en C++ sous vc++ express. Dans cette dll j'ai accés à une structure comme celle ci

typedef public value struct _maStruct
{
char* str1;
char* str2;
int i;
int i2;
}maStruct;

dans mon programme C# j'accéde bien à ma structure et à ces attributs, le soucis est que dans mon code C# le char* est traduit par un sbyte*, la j'avoue que je séche quand à comment remédier à ce problème, que je n'est pas avec le int.

Vous avez une idée sur la nature de mon problème ?

Merci encor

Z.

4 réponses

Lutinore Messages postés 3246 Date d'inscription lundi 25 avril 2005 Statut Membre Dernière intervention 27 octobre 2012 41
27 mars 2006 à 23:02
Quel est le problème !??

Y'a plusieurs façon de convertir la structure en C# ça dépend du contexte, comment elle est utilisée etc..

Donc selon le contexte tu peux très bien garder le type sbyte* pour une chaine ANSI ou char* pour une chaine Unicode, d'ailleurs y'a un constructeur de la classe String qui accepte un pointeur sbyte*.

Toujours selon le contexte tu peux utiliser l'attribut StructLayout :

[ StructLayout( LayoutKind.Sequential, CharSet=CharSet.Ansi )]
public struct Mytruct
{
string str1;
// ...
}

Autre possibilité encore, en .NET 2.0 il y'a les buffer fixe ( fixed ).
0
Lutinore Messages postés 3246 Date d'inscription lundi 25 avril 2005 Statut Membre Dernière intervention 27 octobre 2012 41
27 mars 2006 à 23:07
En C/C++ les chars sur 2 octets sont des WCHAR :

// C/C++
typedef wchar_t WCHAR;
0
z_san Messages postés 80 Date d'inscription jeudi 2 février 2006 Statut Membre Dernière intervention 24 mai 2007
28 mars 2006 à 08:43
ok

Quand je l'éxécute tout se passe bien, mais quand j'initialise ma structure pour la passer en paramètre dans une fonction qui se trouve elle aussi dans la même dll, sur le pointeur en ajoutant un espion sur la structure pour voir la valeur des champs initialisés le compilateur C# me met :

"Impossible de référencer 'maStruct.str' le pointeur n'est pas valide"

Merci encor
0
z_san Messages postés 80 Date d'inscription jeudi 2 février 2006 Statut Membre Dernière intervention 24 mai 2007
28 mars 2006 à 10:29
C'est bon j'ai réglé le pbroblème en remplaçant mon char * par un String et ça marche trés bien je pense pouvoir faire un tuto dans les prochaines semaine sur la création et l'utilisation d'une dll c++ et son utilisation en c#

Merci encor
0
Rejoignez-nous