begin process at 2012 02 11 05:23:57
  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 conditionner un DllImport [ par BasicInstinct ] Bonjour tout le monde Dans mon projet, j'utilise une dll externe : [code=cs][DllImport("maDLL.dll", CharSet = CharSet.Unicode)] private stat Dll pour Crystal report [ par 24 ans ] Salut tout le monde,j'ai developpé une dll qui comporte une fonction queje vais l'apeler à partir du Designer du crystal reports (dans la partie Addit Utiliser des dll c++ en C# [ par vanisheur ] Bonjour,J'ai vraiment besoin d'aide.je suis en train d'ecrire un programme en C#, celui-ci utilise des fonctions C++ incluses dans des DLL.Une partie Paramètrage entre deux projets différents [ par dorras7 ] Bonjour, j'ai développé un DLL en c# qui implémente une fonction (par exemple M1(typeofobject val)) puis j'ai testé cette fonction dans un autre proje 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


Nos sponsors


Sondage...

CalendriCode

Février 2012
LMMJVSD
  12345
6789101112
13141516171819
20212223242526
272829    

Consulter la suite du CalendriCode

Photothèque

 
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 : 1,123 sec (4)

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