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 :

Passage d'une adresse en c# vers une fonction C++


Sujet :

C++/CLI

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Candidat au Club
    Inscrit en
    Septembre 2004
    Messages
    5
    Détails du profil
    Informations forums :
    Inscription : Septembre 2004
    Messages : 5
    Points : 2
    Points
    2
    Par défaut Passage d'une adresse en c# vers une fonction C++
    Bonjour,

    J'ai un projet C++ (C++ ou C je sais pas) qui a une fonction que j'ai besoin d'appeler depuis mon projet C#. Voilà l'en-tête de la fonction en question :

    int LocateDataMatrix(int Width, int Height, unsigned char* SrcBitmap, int MinSize)

    Pour le moment j'ai fait un projet "propre" en C++ MFC depuis visual studio (Wrapper) qui fait appel à la fonctions que j'ai besoin. De cette manière j'ai une .DLL (avec le projet de base, j'avais uniquement un .LIB).

    J'utilise cette DLL depuis mon projet C# à l'aide de la fonction DLLImport :


    [DllImport("DataMatrixWrapper.dll")]
    unsafe static extern int w_LocateDataMatrix(int Width, int Height, byte[] SrcBitmap, int MinSize);


    Les paramètres sont :

    int Width : Largeur de l'image en int

    int Height : Hauteur de l'image en int

    unsigned char* SrcBitmap : Adresse de pointeur vers un tableau de byte (ce tableau de byte correspond à une image convertie en niveaux de gris puis mise dans un tableau sous forme de bytes)

    int MinSize : Taille fixe de 54

    Lorsque l'on appelle cette fonction depuis c#, nous avons la valeur 2 qui nous est toujours retournée, elle correspond à un code d'erreur. Comme à ce moment on est entré dans le fonction, le problème ne peut pas se situer dans la communication entre les 2 languages. La fonction C++ marche depuis une autre applic C++, donc la fonction est correcte de toute facon.

    Le seul problème possible peut venir du passage de paramètre :
    La largeur et la hauteur de l'image ne peuvent être faux. Le seul problème peut venir de SrcBitmap qui veut un unsigned char* en c++. D'après le créateur du projet C++, il faudrait envoyer une adresse mémoire qui pointe sur le tableau de byte de l'image. Et comme il n'y a pas de pointeur en C# c'est la que se situe le problème : Si on a un tableau de byte, comment connaitre son adresse mémoire ?

    Merci d'avance pour votre aide

  2. #2
    Membre actif
    Inscrit en
    Août 2006
    Messages
    381
    Détails du profil
    Informations forums :
    Inscription : Août 2006
    Messages : 381
    Points : 252
    Points
    252
    Par défaut
    Hello,

    pas de pointeurs en C# ?
    T'as essayé l'opérateur * à tout hasard. Essaye, tu vas être surpris.

    Bye.

  3. #3
    Candidat au Club
    Inscrit en
    Septembre 2004
    Messages
    5
    Détails du profil
    Informations forums :
    Inscription : Septembre 2004
    Messages : 5
    Points : 2
    Points
    2
    Par défaut
    Citation Envoyé par Pilloutou
    Hello,

    pas de pointeurs en C# ?
    T'as essayé l'opérateur * à tout hasard. Essaye, tu vas être surpris.

    Bye.
    Il faut à ce moment que j'utilise du code unsafe, je dois convertir toutes mes fonctions dont j'ai besoin en code unsafe, c'est ça ?

    J'avais déjà essayé, mais dans mon code j'ai un buffer MemoryStream et il n'acceptait pas de le convertir en unsafe par exemple.

  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
    Par défaut
    t'as essayé en faisant un wrapper en c++/cli ?

  5. #5
    Candidat au Club
    Inscrit en
    Septembre 2004
    Messages
    5
    Détails du profil
    Informations forums :
    Inscription : Septembre 2004
    Messages : 5
    Points : 2
    Points
    2
    Par défaut
    Citation Envoyé par nico-pyright(c)
    t'as essayé en faisant un wrapper en c++/cli ?
    Quel est la différence ?

    Si j'ai un message d'erreur (2) qui vient de la classe c++, c'est que la communication entre les 2 classes se fait non ?

  6. #6
    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
    je n'ai pas vraiment compris ce que tu faisais, mais je pense qu'il est plus simple d'effectuer une conversion s'il y a besoin, ou du marshalling s'il y a aussi besoin, à l'interieur d'une classe en c++/cli

  7. #7
    ARB
    ARB est déconnecté
    Membre à l'essai
    Profil pro
    Inscrit en
    Septembre 2003
    Messages
    12
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2003
    Messages : 12
    Points : 11
    Points
    11
    Par défaut A ce propos.
    Citation Envoyé par nico-pyright(c)
    t'as essayé en faisant un wrapper en c++/cli ?
    Bonjour,
    Par l'intermédiaire d'un wrapper c++/cli, je peux faire passer des tableaux à 1 dimension (pin_ptr<int>...), mais existe-t-il un moyen pour passer un tableau à 2 dimensions ?
    Merci.

  8. #8
    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
    oui, tu peux utiliser Marshall::Copy

Discussions similaires

  1. Réponses: 5
    Dernier message: 13/08/2014, 19h14
  2. Réponses: 14
    Dernier message: 23/04/2012, 22h32
  3. Passage d'une adresse en c# vers une fonction C++
    Par Nico_stras dans le forum C++/CLI
    Réponses: 2
    Dernier message: 09/01/2007, 19h51
  4. [Frames] un lien vers une page de Frames vers une page sans
    Par jamesleouf dans le forum Balisage (X)HTML et validation W3C
    Réponses: 5
    Dernier message: 23/09/2005, 18h25
  5. Redirection d'un site vers une adresse dans UNE NEW FENETRE
    Par Mout85 dans le forum Balisage (X)HTML et validation W3C
    Réponses: 5
    Dernier message: 20/06/2005, 09h40

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