2013-04-15 3 views
0

У меня есть DLL, которая предоставляет функцию с переменным списком параметров, которые определяются какМетод ActiveX с переменным списком параметров?

my_func (INT вар, ...)

В зависимости от того, как my_func() называется она expectes более или менее дополнительные параметры ,

Теперь эта DLL должна быть обернута ActiveX-контролем на основе MFC. Для определений методов я могу найти много VT_ и VTS_, которые определяют этот перенос на определенный, заранее определенный тип. Но возможно ли иметь ActiveX-метод с таким списком параметров?

Если да: как это можно реализовать?

+0

Вы могли бы рассмотреть (фиксированный размер) STRUCT/запись со всеми соответствующими значениями и только рука, один указатель. Затем согласовать значения/флаги, чтобы указать пустые поля. Или альтернативно; две переменные, одна из которых является указателем на структуру (с данными, которые применяются к определенному сценарию), а другая - идентификатором для этого типа структуры. В API Windows часто размер структуры используется в качестве (версии) идентификатора. –

ответ

0

Хотя технически возможно, используя ключевое слово в IDL в сочетании с аргументом, указанным как SAFEARRAY(VARIANT), нет поддержки для указания такого метода в проекте MFC ActiveX. Вы можете сделать это с помощью ATL вместо этого, но я думаю, что это было бы огромным неудобством только для того, чтобы получить описанную вами функциональность.

Некоторые лучший выбор (на мой взгляд) будет:

  1. Обеспечить конкретные методы для каждого из случаев использования вашей завернутые функции.
  2. Предоставьте единственный метод, который предоставляет все аргументы и добавляет UINT для установки флагов в зависимости от того, какие аргументы следует использовать.

Мой выбор был бы 1.

+0

Хм, оба решения в этом случае невозможны. Первоначальный список переменных - это список, состоящий из тега (char-array) и значения (зависит от тега и может быть char-array, int или pointer). Полученные возможные комбинации и варианты действительно огромны. Поэтому я боюсь, что мне нужно предоставить функции, которые устанавливают одну пару тегов/значений для каждого вызова и другие функции, которые заканчивают список, чтобы он мог использоваться внутри. Не очень элегантный ... – Elmi

+0

I See - Мне кажется, вам нужен какой-то шаблон фасад здесь, проще ли это сделать в DLL, чтобы сделать ActiveX проще? –