begin process at 2010 02 10 03:12:48
  Trouver un code source :
 
dans
 
Accueil > Forum > 

C#

 > 

Système

 > 

Mémoire

 > 

DllImport


Derniers messages déposésPoser une question dans le forum ou lancer une discussion

DllImport

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ée 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

Février 2010
LMMJVSD
1234567
891011121314
15161718192021
22232425262728

Consulter la suite du CalendriCode

 
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

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 0,889 sec (4)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales