Utilisation de VARIANT [VC++] - C++ - Programmation
Marsh Posté le 20-05-2003 à 14:55:22
skeye a écrit : Bon, j'arrete de polluer Blabla avec ca...
|
C'est koi "src"?
Ensuite t'es sur ke pData est un tableau. Je doute.
Je pense plutot que c juste un parametre [in, out], genre tu passes un VARIANT* et ca te le remplit.
Bon alors ma suggestion:
Code :
|
Ensuite tu peux acceder a ce kil y a ds pVal.
Ms fodrait savoir ce ke tu cherches.
"pVal.vt" te donne le "type" du VARIANT (long, short, BSTR, Interface...)
Voila.
Marsh Posté le 20-05-2003 à 15:02:34
konar_spreme a écrit :
|
src c'est un CImage, un type perso...
Pour le fait que pData soit un tableau, c'était une supposition, puisque la doc VB pour areaGet dit:
Citation : |
Je vais essayer ta proposition, ca pourrait en effet être ca!
Marsh Posté le 20-05-2003 à 15:11:37
Avec ta solution, je me retrouve avec vt = 8209...et si j'ai bien lu dans la doc sa valeur devrait être entre 0 et 17 (valeurs valides pour son type)!
Marsh Posté le 20-05-2003 à 15:20:41
skeye a écrit : Avec ta solution, je me retrouve avec vt = 8209...et si j'ai bien lu dans la doc sa valeur devrait être entre 0 et 17 (valeurs valides pour son type)! |
En fait tu te trompes : 8209 == 0x2011 == VT_ARRAY | VT_UI1
Donc tu as un ARRAY de BYTE (un tableau de unisgned short).
Bon ca se complique...
Marsh Posté le 20-05-2003 à 15:22:44
konar_spreme a écrit : |
Ahhhhhhhhhhhhh!
J'avais pas pensé à ça...oublié le fonctionnement du '|' !!
Merci bcp, je crois qu'il m'aurait fallu longtemps avant de trouver ca!
Marsh Posté le 20-05-2003 à 15:32:26
skeye a écrit : |
Bon alors maintenant tu essayes caster ton VARIANT* en SAFEARRAY* (vu ke c un tablo, je pense ke la fonction devrait plutot prendre un SAFEARRAY* qu'un VARIANT*, ms bon)
Et tu essayes :
Code :
|
Marsh Posté le 20-05-2003 à 15:37:08
konar_spreme a écrit :
|
Va falloir que je passe un moment à bien décortiquer tout ca moi...
Merci bcp!!
Marsh Posté le 20-05-2003 à 15:41:10
konar_spreme a écrit :
|
petite erreur d'inattention
Code :
|
Il y a aussi:
Code :
|
qui te retourne le nombre de dimension de ton SAFEARRAY
Enfin voila, bonne chance
///////////////////////
Pour finir : tu peux faire une recherche sur les MSDN
KB Q167668
(online http://search.microsoft.com/gomsur [...] %3b167668)
Marsh Posté le 20-05-2003 à 16:00:31
Bon, en gros si je récapitule:
Avec ca j'ai un pointeur sur une structure contenant mon tableau:
Code :
|
Avec ca j'ai un pointeur sur mon tableau dans pbstr:
Code :
|
Puis les 2 autres me permettent de connaitre le nb de dimensions ainsi que celui d'éléments par dimension...j'ai bon?
Marsh Posté le 20-05-2003 à 16:27:34
Ca semble bien marcher, j'arrive à retrouver les dimensions de l'image que j'ouvre...Merci mille fois!
Marsh Posté le 20-05-2003 à 16:27:45
skeye a écrit : Bon, en gros si je récapitule:
|
Ouais presk.
En fait je m etais planté (un peu le premier coup, rectifié apres)
Avec ca j'ai un pointeur sur une structure contenant mon tableau:
Code :
|
Oui après t'as bon.
Mate l'exemple ds les msdn, c tout expliké...
Marsh Posté le 20-05-2003 à 16:28:13
skeye a écrit : Ca semble bien marcher, j'arrive à retrouver les dimensions de l'image que j'ouvre...Merci mille fois! |
parfait.
Marsh Posté le 20-05-2003 à 16:35:04
konar_spreme a écrit : |
Citation : |
Je suis en train de regarder l'exemple de SafeArrayAccessData, c'est celui-ci?
Marsh Posté le 20-05-2003 à 16:37:24
skeye a écrit :
|
De ma faute, le ')' a collé...
http://support.microsoft.com/defau [...] s%3b167668
voila, ca devrait etre bon.
Marsh Posté le 20-05-2003 à 16:42:07
konar_spreme a écrit : |
Merci encore!
Je vais pouvoir aller me reposre le cerveau tranquille...
J'essaierai de récupérer le contenu du tableau demain matin à-partir de ça...:jap:
Marsh Posté le 21-05-2003 à 08:57:54
J'ai encore une ou deux petites questions :
Dans l'exemple que tu m'as donné, il est question de chaines de caractères et le type de pbstr est donc BSTR HUGEP *.
En ce qui me concerne ce sera donc plutot BYTE HUGEP *, c'est bien ça? D'ailleurs je n'ai pas trouvé ce que signifiait HUGEP...
Ensuite, j'arrive comme je l'ai dit plus haut à récupérer les dimensions de mon image correctement via
Code :
|
Mais je vois dans cet exemple qu'ils utilisent
Code :
|
pour calculer le nombre d'éléments à-partir des bornes haute et basse...y-a-t'il vraiment une différence ou bien est-ce équivalent?
Marsh Posté le 21-05-2003 à 09:20:28
Bon, pour les dimensions ca me donne le même résultat, donc je garde ce que j'avais...
Par contre il semblerait que mon tableau soit mal initialisé ou que j'y accède pas comme il faut.
Voilà comment je procède:
Code :
|
Ceci plante pour i=0, j=0...
Le débugger m'annonce que pbstr[i] = 0xffffffff
Je suis sur que c'est une connerie, du style le type de pbstr...mais je trouve pas!
Marsh Posté le 21-05-2003 à 09:50:19
Bon, j'ai p-e la solution. J'ai mis:
Code :
|
Puis j'y accède directement par:
Code :
|
Ca ne plante pas à l'exécution, il ne me reste plus qu'à vérifier que je récupère bien mon image...
[edit]
C'était bien ca, merci bcp à konar_spreme ( )et aussi à tous ceux qui ont lu ce topic!:jap:
Marsh Posté le 21-05-2003 à 15:16:12
Citation : |
Pas de koi, pour une fois kil y avait une vraie question interessante...
Marsh Posté le 20-05-2003 à 14:43:59
Bon, j'arrete de polluer Blabla avec ca...
Voilà le pb:
J'utilise un activeX qui me permet d'utiliser une fonction définie comme ceci:
Je n'ai malheureusement pas de doc VC++ pour ce composant, je n'ai que la doc pour VB, et je dois donc plus ou moins deviner comment m'en servir...
En gros, l'objectif de la fonction est de remplir pData, tandis que le mien est de récupérer toutes les infos de ce même pData.
J'ai donc, en suivant les conseils de Tetramagraton IVHV (ou un truc dans le genre...flemme de copier/coller) mis un breakpoint dans mon prog afin de voir pdt l'exécution ce que j'ai comme type de données dedans:
Le breakpoint est sur la dernière ligne.
Le pb est que lors de l'exécution, mon (pData[i]).vt ne contient pas de valeur cohérente...
Si quelqu'un sait manipuler ce type de données, pourrait-il m'éclairer?