IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

C++/CLI Discussion :

[C++ -> C#] Erreur PInvokeStackImbalance


Sujet :

C++/CLI

  1. #1
    Membre régulier
    Inscrit en
    Mars 2006
    Messages
    76
    Détails du profil
    Informations forums :
    Inscription : Mars 2006
    Messages : 76
    Points : 74
    Points
    74
    Par défaut [C++ -> C#] Erreur PInvokeStackImbalance
    Bonjour,

    Je suis en train de connecter mon programme fait sous C# avec quelques libraires DLLs écrites en C++.

    Tout de suite, j'obtiens sur l'écran l'erreur suivante: "PInvokeStackImbalance" quand je veux faire allusion à cette fonction de ma DLL:

    short MaFonction (char* valueCharArray, long valueLong1, long valueLong2, short valueShort);

    en utilisant:

    [DllImport("MaDLL.dll", EntryPoint = "MaFonction")]
    unsafe public static extern short MaFonction(char[] valueCharArray, long valueLong1, long valueLong2, short valueShort);

    et

    valeur = MaFonction (valueCharArray, valueLong1, valueLong2, valueShort);

    Le message mentionne la signature PInvoke géreé et la signature de destin pas signée.

    J'avais pensé à la "substitution" des pointeurs par des arrays comme la source du problème, mais j'ai d'autres byte* et short* avec lesquels j'ai joué d'une façon similaire et je n'ai pas reçu des messages du système.

    En plus, je me suis aperçu que je reçois l'erreur seulement quand je suis avec la dépuration "Debug". Quand j'execute mon application hors le Visual Studio ou avec le "Release", tout marche bien!!

    Tous les problèmes mentionnés ont eu lieu sous le Visual Studio 2005. Je ne les ai pas testés sous le Visual Studio 2003.

    Quelques idées sur ce que je fais mal?

    Merci par avance.

  2. #2
    Rédacteur
    Avatar de nico-pyright(c)
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    6 414
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 6 414
    Points : 16 075
    Points
    16 075
    Par défaut
    j'aurai tendance à remplacer les pointeurs par des intprt, et de traiter ensuite avec le marshalling au besoin

  3. #3
    Membre régulier
    Inscrit en
    Mars 2006
    Messages
    76
    Détails du profil
    Informations forums :
    Inscription : Mars 2006
    Messages : 76
    Points : 74
    Points
    74
    Par défaut
    Un exemple très simple en deux lignes de code, ou une réference dans l'Internet pour commencer la recherche de ce que vous disez seraient-ils possibles? Merci.

  4. #4
    Rédacteur
    Avatar de nico-pyright(c)
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    6 414
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 6 414
    Points : 16 075
    Points
    16 075

  5. #5
    Membre régulier
    Inscrit en
    Mars 2006
    Messages
    76
    Détails du profil
    Informations forums :
    Inscription : Mars 2006
    Messages : 76
    Points : 74
    Points
    74
    Par défaut
    Merci beaucoup de votre aide, je crois que avec les exemples de ce lien, un peu d'effort et un peu de temps, je serai capable d'effacer ce message d'erreur qui paraît partout.

    De toute façon, avez-vous connaissance que le problème avec le PStackImbalance se soit produit seulement dans l'environnement VS2005 ou peut-il se passer lors du développement avec le VS2003 aussi?

  6. #6
    Membre du Club
    Profil pro
    Inscrit en
    Octobre 2005
    Messages
    55
    Détails du profil
    Informations personnelles :
    Localisation : France, Gironde (Aquitaine)

    Informations forums :
    Inscription : Octobre 2005
    Messages : 55
    Points : 49
    Points
    49
    Par défaut
    Citation Envoyé par Iván Y.
    Bonjour,
    "PInvokeStackImbalance"
    Attention aussi à la taille des types entiers entre .NET et natif. ( long = 64bits en .NET)

  7. #7
    Membre régulier
    Inscrit en
    Mars 2006
    Messages
    76
    Détails du profil
    Informations forums :
    Inscription : Mars 2006
    Messages : 76
    Points : 74
    Points
    74
    Par défaut
    Merci.

    Ça peut supposer la solution a tous les problèmes. Je ne m'en 'etais pas aperçu. Je pensais plutôt aux pointeurs.

    Mais un résultat qui me semble encore totallement étonnant est celui de ne montrer l'erreur que sous le mode "Debug", car l'executable (une fois sorti de l'EDI VS2005) n'a rien de bizarre et peut fonctionner sans problèmes. Quelle serait la raison de tout ça?

  8. #8
    Membre régulier
    Inscrit en
    Mars 2006
    Messages
    76
    Détails du profil
    Informations forums :
    Inscription : Mars 2006
    Messages : 76
    Points : 74
    Points
    74
    Par défaut
    Curieusement, la différence de taille des long en C# et C++, c'était la clé. Merci jobigoud!!

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 7
    Dernier message: 30/05/2015, 16h04
  2. Erreur pInvokestackImbalance sur SendMessage
    Par neojeff dans le forum VB.NET
    Réponses: 5
    Dernier message: 24/10/2013, 14h25
  3. Réponses: 2
    Dernier message: 27/05/2002, 19h46
  4. erreur IDL:omg.org/CORBA/MARSHAL:1.0
    Par Pinggui dans le forum CORBA
    Réponses: 3
    Dernier message: 13/05/2002, 15h05
  5. [Kylix] Erreur objet
    Par Anonymous dans le forum EDI
    Réponses: 1
    Dernier message: 22/03/2002, 09h41

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo