Vous ne trouvez pas de réponse à votre problème ? Alors posez la question dans le forum. Souvenez-vous qu'il n'y a jamais de question bête, mais rester dans l'ignorance parce que l'on n'ose pas poser une question, ça c'est une erreur !

Sujet : DllImport [ Système / Mémoire ] (RMI)

lundi 26 novembre 2007 à 17:54:02 | DllImport

RMI

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#

Merci de vos réponses.
RMI

mardi 27 novembre 2007 à 11:20:55 | Re : DllImport

nicolasToulouse

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 :)

The Monz, Toulouse


mardi 27 novembre 2007 à 11:52:27 | Re : DllImport

RMI

Salut,

J'ai fait des tests avec une fonction de la dll qui retourne toujours true (AlwaysTrue) et une qui retourne toujours false (AlwaysFalse)

Résultats :
AlwaysTrue =>true;
AlwaysFalse=>true;

Par contre si on force ces fonction en int
AlwaysTrue =>257;
AlwaysFalse=>256;

Quand penses tu?

RMI

mardi 27 novembre 2007 à 14:56:44 | Re : DllImport

nicolasToulouse

j'en pense qu'il doit y avoir un soucis entre le bool C# et le bool C++ retourne

Cela dit, c'est quand meme etrange car j'ai déja fait ce genre de fonction et
cela fonctionnait sans avoir à faire de "bidouille"

Peut-etre dans les options de compilation de ton projet C++ (genre unicode ou
autre)

The Monz, Toulouse


mardi 27 novembre 2007 à 15:01:28 | Re : DllImport

RMI

Ok, je vais voir avec le programmeur de la dll

RMI

mardi 27 novembre 2007 à 16:41:15 | Re : DllImport

Lutinore

Administrateur CodeS-SourceS
Salut, esaye ça..


[ DllImport( "..." ) ]
[ return: MarshalAs( UnmanagedType.Bool ) ] // Valeur de retour sur 1 octet.
public static extern bool DoSomething( .. )


mercredi 28 novembre 2007 à 08:34:58 | Re : DllImport

RMI


Merci de ton intervention Lutinore, mais ta solution ne fonctionne pas, j'ai un retour toujours à true.

RMI

vendredi 28 décembre 2007 à 23:08:49 | Re : DllImport

ShareVB

salut,

si tu mets un retour en byte ca te renvoie quoi ?

sinon tu es sûr du ThisCall, on ne sait jamais si ca passait en Cdecl ou en FastCall ?

ShareVB

lundi 31 décembre 2007 à 08:35:17 | Re : DllImport

RMI

Salut,

Je suis sur du ThisCall car j'utilise un objet de la dll et le retour en byte me renvoie une valeur et non un booléen.
Merci de ton intervention

RMI

lundi 31 décembre 2007 à 10:30:54 | Re : DllImport

ShareVB

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...


ShareVB


1 2

Cette discussion est classé dans : fonction, dll, charset, dllimport, isbuttonpushed


Répondre à ce message

Sujets en rapport avec ce message

long en long* [ par ybuchheit ] Bonjour, Je dois appeler une fonction écrite en C et provenant d'une dll. Cette fonction prend comme argument un long*. Ma fonction est bien déclarée probleme string c# [ par seb8334 ] Bonjour , Je n'arrive pas à utiliser le type string en C++ Message d'erreur a la compilation (sous visula sudio .NET 2003) Citation: error c20 Sous avec des DLLImport [ par z_san ] Voilà j'utilise une dll que j'ai développé en C, dans un programme C#.Quand j'appel une fonction de la dll par DLLImport, au moment ou le programme pa Dll non managé: Marshal type stdcall ? [ par Khaled_ST ] Bonjour à tousJ'essaie d'utiliser dans mon appli les fonctions d'une dll qui a été développé en C++. L'une de ces fonction me pose un vrai problème pu Pointeurs... Encore et toujours... [ par darknoon29 ] Nous avons toujours quelques difficultés, voilà ce qu'on a écrit:          [DllImport("ordonantsdll.dll")] public static extern System.IntPtr Utiliser une fonction d 'une DLL [ par demich_g ] Bonjour,J'ai besoin de votre savoir:J'aimerais utiliser une fonction d'une DLL. J'ai référencé la DLL (vbPCapLib.dll) dans mon projet et le problème s gros problème avec DllImport : EntryPointNotFound [ par kyfranBibax ] Coucou, En fait, je dois utiliser une fonction qui se trouve dans un programme en C. Cette fonction en appelle d'autres (libtiff) et j'ai donc créer DLLImport Au Secours !!!!!!! [ par blueangel ] Bonjour tout le monde ,Voila je veux créer une DLL en c# le pb c'est que cette dll fait référence à une autre DLL ecrite en c++pour tester le programm StringBuilder [ par RegVB ] Bonjour, Je rencontre un comportement bizarre avec un StringBuilder. J'ai une fonction qui enrichie un StringBuilder et me renvoie le résultat sous fo


Nos sponsors

Sondage...

CalendriCode

Juillet 2009
LMMJVSD
  12345
6789101112
13141516171819
20212223242526
2728293031  

Consulter la suite du CalendriCode

Téléchargements

Logiciels à télécharger sur le même thème :

Comparez les prix Nouvelle version

Photothèque Nouveau !



Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés
Temps d'éxécution de la page : 1,232 sec

Google Coop CodeS-SourceS Google Coop CodeS-SourceS


Certaines images présentes sur le site (notament certains avatars) sont issues des collections IconShock, donc si vous souhaitez utiliser ces icons vous devez les acheter, ne les copiez pas et ne utilisez pas dans vos sites et applications sans les avoir commandé.