cs_RMI
Messages postés305Date d'inscriptionvendredi 18 juillet 2003StatutMembreDernière intervention 2 août 2010
-
26 nov. 2007 à 17:54
cs_RMI
Messages postés305Date d'inscriptionvendredi 18 juillet 2003StatutMembreDernière intervention 2 août 2010
-
2 janv. 2008 à 08:37
Bonjour,
Je dois dois faire le lien entre une dll C++ et C#
La fonction
[DllImport(DLL_NAME, CharSet = CharSet.Ansi, EntryPoint = "MvaSensorNew")]
private static extern IntPtr MvaSensorNew();
retourne un pointeur sur l'objet
La fonction
[DllImport(DLL_NAME, EntryPoint = "?isButtonPushed@MvaSensor@@QAE_NH@Z", CharSet CharSet.Ansi, CallingConvention CallingConvention.ThisCall)]
private static extern bool isButtonPushed(IntPtr _iPtr, int _iNumCapteur);
doit me retourner l'état d'enfoncement d'un bouton d'un matériel.
Or le retour de la fonction est toujours true
- bien que cette dll fonctionne correctement avec un programme C++ classique
- bien que le pointeur soit correct (d'autre procédure de cette dll fonctionne)
Voilà le nom non décoré de la fonction bool MvaSensor::isButtonPushed(int)
Voilà le nom décoré ?isButtonPushed@MvaSensor@@QAE_NH@Z
Il y a t il une erreur de ma part lors de l'appel à cette fonction (exp : bool b=isButtonPushed(iptrHandle,10]) ou lors de sa création pour C#
nicolasToulouse
Messages postés31Date d'inscriptionmercredi 14 juin 2006StatutMembreDernière intervention11 janvier 2008 27 nov. 2007 à 11:20
non à priori, je ne vois pas d'erreur grossière à premiere vue
Maintenant, peut-etre que l'info en argument fait que ta fonction te retourne
toujours true..
Au pire, tu mets un return false des le debut de ta fonction C++ et tu vois bien
ce que tu recuperes.. si tu recuperes False c'est que c'est le code C++ qui est
à incriminer.. sinon, no idea :)
ShareVB
Messages postés2676Date d'inscriptionvendredi 28 juin 2002StatutMembreDernière intervention13 janvier 201626 31 déc. 2007 à 10:30
salut,
de souvenir en C/C++, le BOOL est un int pas un char après effectivement le type "natif" bool est peut être d'un octet...dans tous les cas, tu dit :
Par contre si on force ces fonction en int
AlwaysTrue =>257;
AlwaysFalse=>256;
> donc true 1 sur un octet, false = 0 sur un octet, le bit 1 qui se trouve dans le premier bit de deuxième octet doit être résiduel car je ne pense pas qu'un compilateur soit obligé de faire un "xor eax,eax" pour renvoyer un octet dans "al"...
donc normalement si tu fais un retour en "byte", tu dois récupérer 0 et 1 donc tu as ton booléen...
Lutinore
Messages postés3246Date d'inscriptionlundi 25 avril 2005StatutMembreDernière intervention27 octobre 201241 31 déc. 2007 à 13:14
BOOL = 32 bits.
bool du C++ = 8 bits.
Je ne pense pas à un bit résiduel mais plutôt à un dépassement de capacité :
int b1 unchecked( ( byte )256 ); // 0int b2 unchecked( ( byte )257 ); // 1