Полезная информация

Mozilla Россия — свежие версии программ Mozilla, а также масса полезной информации по каждому продукту.

№122-10-2006 12:38:22

Олег
Участник
 
Группа: Members
Зарегистрирован: 22-10-2006
Сообщений: 2

вызов XPCOM из JavaScript

Ещё раз хай. Есть у меня другая задачка, которая тоже к Mozilla open source code относиться.
Имеется класс:

class IntArray {
public:
    IntArray(int _length) {
        length = _length;
        data = new int[length];
        cout << "in IntArray::IntArray" << endl;
    }
    ~IntArray() {
        delete [] data;
        cout << "in IntArray::~IntArray" << endl;
        }
    int get(int pos, int *retval) {
        cout << "in IntArray::get" << endl
        if(pos<0 || pos>=length) {
            cout << "NS_INTARRAY_GET_ERROR" <<endl;
            return NS_INTARRAY_GET_ERROR;
        }
        *retval = data[pos];
        cout << "pos=" << pos << ", value =" << *retval << endl;
        return NS_OK;
    }
    int set(int pos, int value) {
        cout << "in IntArray::set" << endl
        if(pos<0 || pos>=length) {
            cout << "NS_INTARRAY_SET_ERROR" <<endl;
            return NS_INTARRAY_SET_ERROR;
        }
        data[pos] = value;
        cout << "pos=" << pos << ", value =" << *retval << endl;
        return NS_OK;
    }
private:
    int length;
    int *data;
};

Необходимо представить класс в "XPCOM виде", и обеспечить возможность доступа к его методам из JavaScript.
Например, при открытии следующей страницы:
<html>
    <script>
        var array = new IntArray(20);
        array.set(10,5);
        array.get(10);
        array = null;
    </script>
</html>

в отладочном окне мы должны получить:
in IntArray::IntArray
in IntArray::set
pos=10, value=5
in IntArray::get
pos=10, value=5
in IntArray::~IntArray

Также необходимо убедиться что исключения перехватываются (see for example):

<html>
    <script>
        try {
            var array = new IntArray(20);
            array.set(50,5);
        }
        catch ( NS_INTARRAY_GET_ERROR ) {
            document.write("NS_INTARRAY_GET_ERROR exception\n");
        }
    </script>
</html>

Заранее спасибо тому, кто поможет.

Отсутствует

 

Board footer

Powered by PunBB
Modified by Mozilla Russia
Copyright © 2004–2020 Mozilla Russia GitHub mark
Язык отображения форума: [Русский] [English]