2013-04-15 8 views
0

je une DLL qui fournit des fonctions avec une liste de paramètres variables qui sont définies commeMéthode ActiveX avec liste de paramètres variables?

my_func (int var, ...)

Selon la my_func() est appelé expectes paramètres plus ou moins supplémentaires .

Maintenant, cette DLL doit être encapsulée par un contrôle ActiveX MFC. Pour les définitions de méthodes, je peux trouver beaucoup de VT_ et VTS_ définit ce retour à un type prédéfini spécifique. Mais est-il possible d'avoir une méthode ActiveX avec une telle liste de paramètres variable aussi?

Si oui: comment peut-il être implémenté?

+0

Vous pourriez envisager un (taille fixe) struct/enregistrement avec toutes les valeurs pertinentes et juste la main qu'un pointeur. Alors accord sur les valeurs/drapeaux pour indiquer les champs vides. Ou alternativement; deux variables dont l'une est un pointeur vers une structure (avec des données qui s'appliquent à un certain scénario) et l'autre est un identifiant pour ce type de structure. Dans l'API Windows, la taille de la structure est souvent utilisée comme identifiant (version). –

Répondre

0

Bien qu'il soit techniquement possible, en utilisant le mot-clé vararg dans l'IDL en combinaison avec un argument spécifié comme SAFEARRAY(VARIANT), il n'existe aucun support pour spécifier une telle méthode dans un projet MFC ActiveX. Vous pouvez le faire avec ATL à la place, mais je pense que ce serait un énorme inconvénient juste pour obtenir la fonctionnalité que vous décrivez.

Certains de meilleurs choix (à mon avis) serait:

  1. des méthodes spécifiques pour Fournir chacun des cas d'utilisation de votre fonction enveloppée.
  2. Fournissez une méthode unique qui expose tous les arguments et ajoute un UINT pour définir des indicateurs en fonction des arguments à utiliser.

Mon choix serait 1.

+0

Hm, les deux solutions sont impossibles dans ce cas. La liste des paramètres variables est à l'origine une liste composée d'une balise (char-array) et d'une valeur (dépend de la balise et peut être char-array, int ou pointeur). Les combinaisons possibles et les variantes qui en résultent sont vraiment énormes. J'ai donc peur de devoir fournir des fonctions qui définissent une paire tag/valeur par appel et d'autres fonctions qui finissent la liste afin qu'elle puisse être utilisée en interne. Pas très élégant ... – Elmi

+0

Je vois - Je suppose que vous avez besoin d'un certain type de motif de façade ici, est-il plus facile de le faire dans la DLL pour rendre l'ActiveX plus simple? –

Questions connexes