Xpoint
   [напомнить пароль]

IDL для компоненты: определить метод, возвращающий массив

2005-09-02 12:51:17 [обр] Данил Иванов [досье]

Столкнулся с одним моментом при написании компоненты... Создаю IDL с таким содержимым:

#include "nsISupports.idl"

[scriptable, uuid(9aa46f4f-4dc7-4c06-97af-5035170633fe)]
interface nsIImgLikeOpera : nsISupports
{
  void readUserCssRules([retval] out string aResult);
};

Где

nsImgLikeOpera.prototype = {
  readUserCssRules: function() {
    ...
   return [fontfamily, fontsize];
  },
}

Все работает, могу получить нужный мне массив:

Components.classes["@mozilla.org/imglikeopera;1"]
          .createInstance(Components.interfaces.nsIImgLikeOpera)
          .readUserCssRules().split(",");

Ключевое слово "массив". Изначально хотел сделать таким образом:

void readUserCssRules(out unsigned long aCount,
                      [array, size_is (aCount), retval] out string aResult);

Однако при вызове readUserCssRules() в этом случае лишь тишина.

Хотя вопрос для меня сейчас не слишком актуален (т.к. могу обойтись и вышеприведённым split()), но на будущее хотелось бы узнать: "Где что делаю не так, куда копать?"

спустя 1 час 6 минут [обр] Владимир Палант [досье]
В nsIPref метод getChildList определён так же, так что должно работать. Как вызываете этот метод? Должно быть:
var result = readUserCssRules({});
спустя 1 минуту [обр] Владимир Палант [досье]
PS: Функция readUserCssRules() должна быть определена так, разумеется:
  readUserCssRules: function(aCount) {
    ...
   aCount.value = 2;
   return [fontfamily, fontsize];
  },
спустя 11 минут [обр] Данил Иванов [досье]
Вызывал неправильно. Спасибо, заработало.
Powered by POEM™ Engine Copyright © 2002-2005