Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
2880 connectés 

  FORUM HardWare.fr
  Programmation

  [VC++] Passage de SAFEARRAY en param de fonction dans un composant COM

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

[VC++] Passage de SAFEARRAY en param de fonction dans un composant COM

n°47676
Drums
Posté le 18-07-2001 à 19:21:45  profilanswer
 

Je cherche à passer un tableau (SAFEARRAY) en paramètre d'une fonction d'un composant COM. Mais j'ai une erreur à la compile. Il semble ocnsidérer SAFEARRAY comme dérivant de void ou void*.
voici la déclaration dans le .idl :
 
[id(4), helpstring("method toto" )] HRESULT toto([out] SAFEARRAY xxx);
 
Et l'erreur de compile :  
 
\SearchBDD.idl(24) : error MIDL2139 : type of the parameter cannot derive from void or void * : [ Type 'PVOID' ( Parameter 'xxx' ) ]
\SearchBDD.idl(24) : error MIDL2105 : pointee / array does not derive any size : [ Field 'rgsabound' of Struct 'tagSAFEARRAY' ( Parameter 'xxx' ) ]
\SearchBDD.idl(24) : error MIDL2042 : [out] parameter is not a pointer : [ Parameter 'xxx' of Procedure 'toto' ( Interface 'IReqBdd' ) ]
\SearchBDD.idl(24) : warning MIDL2039 : interface does not conform to [oleautomation] attribute : [ Parameter 'xxx' of Procedure 'toto' ( Interface 'IReqBdd' ) ]
 
Qqu'un aurait une idée ?
Thx

mood
Publicité
Posté le 18-07-2001 à 19:21:45  profilanswer
 

n°47763
Drums
Posté le 19-07-2001 à 10:18:18  profilanswer
 

:hot:

n°47769
seblamb
Posté le 19-07-2001 à 10:29:13  profilanswer
 

Tu est obligé de passer le SAFEARRAY en pointeur.


---------------
[:seblamb] Moi aussi je veux grater dédé!!!
n°47775
Drums
Posté le 19-07-2001 à 10:31:55  profilanswer
 

J'ai déjà essayé et j'ai la même erreur :
 
Source idl :
[id(4), helpstring("method toto" )] HRESULT toto([out] SAFEARRAY *xxx);
 
Résultat à la compile :
 
SearchBDD.idl(24) : error MIDL2139 : type of the parameter cannot derive from void or void * : [ Type 'PVOID' ( Parameter 'xxx' ) ]
SearchBDD.idl(24) : error MIDL2105 : pointee / array does not derive any size : [ Field 'rgsabound' of Struct 'tagSAFEARRAY' ( Parameter 'xxx' ) ]
SearchBDD.idl(24) : error MIDL2040 : [out] only parameter cannot be a pointer to an open structure : [ Parameter 'xxx' of Procedure 'toto' ( Interface 'IReqBdd' ) ]
SearchBDD.idl(24) : warning MIDL2039 : interface does not conform to [oleautomation] attribute : [ Parameter 'xxx' of Procedure 'toto' ( Interface 'IReqBdd' ) ]

n°47787
seblamb
Posté le 19-07-2001 à 10:46:40  profilanswer
 

Je me rappelle, tu es obligé de passer un pointeur sur un VARIANT qui contient un SAFEARRAY.
Pour les objet COM, le type de param autorisé est très limité.
 
Voici un example que j'ai tiré d'un de mes programmes:
 
HRESULT _stdcall GetWBMessage([out] VARIANT *message_i, [in] VARIANT_BOOL refresh_i);
 
Sa retourne un variant qui contient un liste de chaine de caractère
 un morceau du programme listing C++ qui fait cela
 
    LPSAFEARRAY array  = SafeArrayCreateVector(VT_UI1, 0, strlen(m_message));
    memcpy(array->pvData,m_message,strlen(m_message));
 
    message_i->vt = VT_ARRAY|VT_UI1 ;
    message_i->parray = array;


---------------
[:seblamb] Moi aussi je veux grater dédé!!!

Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation

  [VC++] Passage de SAFEARRAY en param de fonction dans un composant COM

 

Sujets relatifs
[Javascript] Fonction ajouter dans une liste select avec tri?passage variable url php
appeler plusieurs fois la même fonction en Javascript syntaxe fausse?je voudrais recupere une valeur en fonction de sont type en PHP!
Partage de constantes entre composant COM et ASP[VB6] composant d'apercu avant impression ???
[C] Fonction retournant la valeur ASCII d'un char[PHP] cherche une fonction
[Win] Quelle est la fonction pour l'explorateur de fichier? 
Plus de sujets relatifs à : [VC++] Passage de SAFEARRAY en param de fonction dans un composant COM


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR