2010-09-10 15 views
1

Une de mes méthodes d'interface COM a besoin d'un paramètre de type défini par l'utilisateur comme ci-dessous:Comment spécifier les paramètres de type définis par l'utilisateur dans la définition de l'interface COM?

[uuid(58ADDA77-274B-4B2D-B8A6-CAB5A3907AE7), object] //Interface 
interface IRadio : IUnknown 
{ 
     ... 
    HRESULT test_method2(someUDT* p2p_UDT); 
     ... 
}; 

Comment pourrait correspondre à la définition de la someUDT dans le * .IDL fichier? Le type someUDT est une structure définie par l'utilisateur.

Merci.

Répondre

1

Peut-être this vous aide - c'est allemand, mais la partie la plus intéressante est le code.

Voici comment struct y est défini:

[ 
    uuid(62D33614-1860-11d3-9954-10C0D6000000), 
    version(1.0) 
] 
typedef struct TPerson 
{ 
    BSTR bstrFirstname; 
    BSTR bstrLastname; 
    long lAge; 
    TDepartment Dep; 
} TPerson; 
// Interface 

Voici comment il est utilisé plus tard:

[ 
    object, 
    uuid(FC126BCD-1EAC-11D3-996A-4C1671000000), 
    dual, 
    helpstring("ICMyUDT Interface"), 
    pointer_default(unique) 
] 
interface ICMyUDT : IDispatch 
{ 
    [id(1), helpstring("method PassUdtByRef")] HRESULT 
     PassUdtByRef([ref, in, out] TPerson* pPerson); 
    [id(2), helpstring("method ReturnUdt")] HRESULT ReturnUdt( 
     [out, retval] TPerson* pPerson); 
    [id(3), helpstring("method PassUdtByVal")] HRESULT 
     PassUdtByVal([in] VARIANT varPerson); 
}; 
+0

Merci beaucoup, David. :) – smwikipedia

0

Je pense que vous devez définir la structure dans le fichier idl. Quelque chose comme:

[ 
    uuid("..."), 
    v1_enum, 
    helpstring("Enum") 
] 
typedef enum MyEnum { 
    value_a, 
    value_b, 
    value_c 
} MyEnum_t; 
+0

Je l'essayer. Mais pas de succès pour le moment. Pourriez-vous donner un exemple d'une structure? Merci. – smwikipedia

+0

J'ai essayé avec ma structure, mais l'avertissement suivant est apparu: avertissement MIDL2368: bibliothèque de type générant des erreurs, ignoré: Impossible de définir UUID: _someUDT (0x800288C6) – smwikipedia

+0

Merci Adrian. Problème résolu. :) – smwikipedia