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

VB.NET Discussion :

équivalence arrayList de vb en c++


Sujet :

VB.NET

  1. #1
    Membre très actif
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2009
    Messages
    391
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2009
    Messages : 391
    Par défaut équivalence arrayList de vb en c++
    Bonjour à tous,

    je sais que c'est le deuxième sujet que je crée de la journée mais celui me semble singulièrement différent du premier .

    J'ai un petit problème et j'espère que vous réussirez à m'aider

    Je lis une image .jpg en vb et je stock les valeurs RGB dans un arrayList :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    Public Class Form1
     
        Public Declare Function ajoutVingt Lib "jpegDLL.dll" Alias "?ajoutVingt@@YGHH@Z" (ByVal lala As Integer) As Integer
     
        Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
            Dim monImage As Bitmap
            Dim res As Integer
            Dim monTableau As ArrayList = New ArrayList
     
            monImage = New Bitmap("C:\Users\Thomas\Downloads\projetCPPVB\projetJPEG\projetJPEG\monJPEG.jpg")
     
            For i = 0 To monImage.Width - 1
                For j = 0 To monImage.Height - 1
                    monTableau.Add(monImage.GetPixel(i, j).R)
                    monTableau.Add(monImage.GetPixel(i, j).G)
                    monTableau.Add(monImage.GetPixel(i, j).B)
                Next
            Next
     
            MsgBox(monTableau(0))
            res = ajoutVingt(monTableau(0))
            MsgBox(res)
     
        End Sub
     
    End Class
    je fais le lien avec une DLL que j'ai implémenté en C++. Le lien semble se faire correctement car la fonction "ajoutVingt" fonctionne.
    Mais maintenant j'aimerais créer une fonction dans mon code C++ qui permettrait de modifier toute les valeurs de mon ArrayList. Donc en vb j'aurai un appel du genre "maFonction(monArrayList)".
    Mais si je passe un arrayList en paramètre. De quel type sera le paramètre de la fonction qui correspond en C++ ??? Ou carrement, quel serait la signature de cette fonction parce que je ne vois pas non plus quel type de retour elle devrait avoir
    J'ai cherché sur le web et j'ai cru comprendre qu'il fallait passer l'indice du premier élément du ArrayList en paramètre mais je n'ai pas bien compris.

    Vous savez comment faire ?

  2. #2
    Inactif  
    Homme Profil pro
    Chef de projet NTIC
    Inscrit en
    Janvier 2007
    Messages
    6 604
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 64
    Localisation : France

    Informations professionnelles :
    Activité : Chef de projet NTIC

    Informations forums :
    Inscription : Janvier 2007
    Messages : 6 604
    Par défaut
    Bonjour

    Déjà, utiliser un arrayList n'est pas une bonne idée : c'est une classe qui date de la version 1.1 du framework et que tu peux avantageusement remplacer par une collection ou une liste générique typée.

  3. #3
    Membre Expert
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    1 103
    Détails du profil
    Informations personnelles :
    Âge : 47
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations forums :
    Inscription : Juillet 2006
    Messages : 1 103
    Par défaut
    bluedeep, oui et au passage l'éloignera d'autant plus du résultat qu'elle souhaite obtenir...

    l'interopérabilité avec une librairie native surtout C++, est quelque chose d'assez ardue en règle générale.

    il faut bien que tu réalise une chose, les 2 mondes ne sont pas compatibles.
    l'interopérabilité entre les 2, ne signifie aucunement compatibilité, et de façon générale, les modèles mémoires pour les types et les classes plus particulièrement diffères complètement entre l'univers natif et l'univers managé...
    l'environnement managé, est capable, de manipuler des types et objets non managés, mais c'est là que s'arrête l'interopérabilité... l'inverse n'est pas possible !
    en d'autres termes, tu ne peux en aucun cas fournir à ta fonction native, une instance d'un objet managé, et espérer qu'il va le modifier comme tu le souhaite.

    cependant avant de repartir totalement dépité par ce constat... il existe une solution, mais complexe à mettre en œuvre et qui sort largement d'une simple aide sur ce forum.
    en effet, quand tu regarde les différents tutos, le P/Invoke, c'est bien, c'est beau, ca permet des choses incroyables, et ca parait même simple... oui si tu te cantonne à appeler des fonctions avec des paramètres types intégraux (int et compagnie), mais tout le monde, et tout particulièrement les tutos font l'impasse sur la partie de P/Invoke qui le rend réellement intéressant, mais aussi très compliqué...
    en un mot : Le Marshaling !
    si tu as utilisé une technologie nommée .NET Remoting, tu en a déjà entendue parler, s'était la clé pour faire des services .NET Remoting, car cela permettait notamment de générer des proxy d'appels client...

    je te suggère de regarder tout ce que tu pourra trouver sur le marshaling d'objet surtout au niveau de la msdn... mots clés : p/invoke marshaling sur google par exemple.
    mais il y a fort à parier que l'ensemble des résultats soit de la littérature en anglais.

  4. #4
    Inactif  
    Homme Profil pro
    Chef de projet NTIC
    Inscrit en
    Janvier 2007
    Messages
    6 604
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 64
    Localisation : France

    Informations professionnelles :
    Activité : Chef de projet NTIC

    Informations forums :
    Inscription : Janvier 2007
    Messages : 6 604
    Par défaut
    Citation Envoyé par cinemania Voir le message
    bluedeep, oui et au passage l'éloignera d'autant plus du résultat qu'elle souhaite obtenir...
    Certes, mais justement il (elle ?) a plutôt intérêt à passer un array normal dans ce cas.

    l'interopérabilité avec une librairie native surtout C++, est quelque chose d'assez ardue en règle générale.

    il faut bien que tu réalise une chose, les 2 mondes ne sont pas compatibles.
    l'interopérabilité entre les 2, ne signifie aucunement compatibilité, et de façon générale, les modèles mémoires pour les types et les classes plus particulièrement diffères complètement entre l'univers natif et l'univers managé...
    l'environnement managé, est capable, de manipuler des types et objets non managés, mais c'est là que s'arrête l'interopérabilité... l'inverse n'est pas possible !
    en d'autres termes, tu ne peux en aucun cas fournir à ta fonction native, une instance d'un objet managé, et espérer qu'il va le modifier comme tu le souhaite.

    cependant avant de repartir totalement dépité par ce constat... il existe une solution, mais complexe à mettre en œuvre et qui sort largement d'une simple aide sur ce forum.
    en effet, quand tu regarde les différents tutos, le P/Invoke, c'est bien, c'est beau, ca permet des choses incroyables, et ca parait même simple... oui si tu te cantonne à appeler des fonctions avec des paramètres types intégraux (int et compagnie), mais tout le monde, et tout particulièrement les tutos font l'impasse sur la partie de P/Invoke qui le rend réellement intéressant, mais aussi très compliqué...
    en un mot : Le Marshaling !
    si tu as utilisé une technologie nommée .NET Remoting, tu en a déjà entendue parler, s'était la clé pour faire des services .NET Remoting, car cela permettait notamment de générer des proxy d'appels client...

    je te suggère de regarder tout ce que tu pourra trouver sur le marshaling d'objet surtout au niveau de la msdn... mots clés : p/invoke marshaling sur google par exemple.
    mais il y a fort à parier que l'ensemble des résultats soit de la littérature en anglais.
    J'ose espérer que ce discours s'addresse au posteur initial et pas à moi. Bon, je te laisse pour cette fois le bénéfice du doute.

  5. #5
    Membre très actif
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2009
    Messages
    391
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2009
    Messages : 391
    Par défaut
    Envoyé par cinemania Voir le message
    bluedeep, oui et au passage l'éloignera d'autant plus du résultat qu'elle souhaite obtenir...
    Certes, mais justement il (elle ?) a plutôt intérêt à passer un array normal dans ce cas.
    "il", ça serait pas de refus
    mais aussi très compliqué...
    en un mot : Le Marshaling !
    je pense que je vais essayer autre chose. Ce sera surement pas optimisé mais au moins ça sera moins compliqué
    Déjà, utiliser un arrayList n'est pas une bonne idée : c'est une classe qui date de la version 1.1 du framework et que tu peux avantageusement remplacer par une collection ou une liste générique typée.
    Certes, mais justement il (elle ?) a plutôt intérêt à passer un array normal dans ce cas.
    Vous pensez que si j'utilise un array plutôt qu'un arrayList je pourrais utiliser un tableau simple pour faire l'équivalence en C++ ? (si j'ai bien compris ça :
    l'environnement managé, est capable, de manipuler des types et objets non managés, mais c'est là que s'arrête l'interopérabilité... l'inverse n'est pas possible !
    , votre réponse sera négative)

    Et si la réponse est négative, si je veux traité les valeurs de mon tableau (qui sont des entiers) , je devrais faire une boucle qui appellera ma fonction pour chaque valeur du array ?
    j'ai mis mes réponse en citation pour pouvoir structuré mon message
    Merci pour votre aide

  6. #6
    Inactif  
    Homme Profil pro
    Chef de projet NTIC
    Inscrit en
    Janvier 2007
    Messages
    6 604
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 64
    Localisation : France

    Informations professionnelles :
    Activité : Chef de projet NTIC

    Informations forums :
    Inscription : Janvier 2007
    Messages : 6 604
    Par défaut
    Bon, reposte peut être la signature C++ de la méthode qui consomme l'array. En effet, la première méthode qui te posait soucis consommait juste un scalaire, pas un tableau.

    A partir de là, on va sans doute pouvoir te dire comment consommer cela.

  7. #7
    Membre très actif
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2009
    Messages
    391
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2009
    Messages : 391
    Par défaut
    Je pense m'être débloqué merci beaucoup de votre aide

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

Discussions similaires

  1. équivalent lien HTML
    Par Dra_Gun dans le forum Flash
    Réponses: 3
    Dernier message: 15/12/2003, 16h25
  2. Réponses: 4
    Dernier message: 21/09/2003, 15h50
  3. Réponses: 3
    Dernier message: 21/08/2003, 14h47
  4. [postgreSQL] équivalent de la function 'instr'
    Par Dra_Gun dans le forum Requêtes
    Réponses: 2
    Dernier message: 17/01/2003, 16h09
  5. Équivalent du #IFDEF
    Par agh dans le forum Langage
    Réponses: 4
    Dernier message: 14/10/2002, 18h44

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