Как вы можете открыть класс, который может иметь несколько экземпляров? Например, класс Image:
var img1 = new Image( 640, 480 );
var img2 = new Image( 1024, 768 );
img1.clear( "red" );
img2.clear( "black" );
Как вы можете открыть класс, который может иметь несколько экземпляров? Например, класс Image:
var img1 = new Image( 640, 480 );
var img2 = new Image( 1024, 768 );
img1.clear( "red" );
img2.clear( "black" );
Это лучшее сообщение в блоге, которое я мог бы найти при экспонировании объектов С++ для V8 Javascript. Он идет более подробно и разбивает его на более мелкие шаги с помощью фрагментов кода. Будьте осторожны: фрагменты кода имеют небольшие несоответствия, и мне потребовалось несколько раз прочитать. Прочитав мое краткое резюме заранее, вы можете помочь:
new
будет вызываться от) к конструктору С++.new
и вызывает конструктор класса С++. Затем он обертывает объект, вызывая метод wrapObject(), созданный на шаге 1.2.Теперь память, выделенная на этапе 2.2, должна быть delete
'd некоторое время. Обновление: Следующая запись в блоге, Persistent Handles," подробно описывает это.
Мои заметки о действительном коде указанном в этих сообщениях в блоге:
wrapPoint()
в блоге фактически аналогичен методу unwrap()
в фактическом коде; не wrap()
SetInternalFieldCount(0
, constructorCall
Вот помощник, который я написал некоторое время назад, что упрощает просмотр и использование контекстов в v8. Надеюсь, что это поможет.
https://gamedev.stackexchange.com/questions/2796/binding-c-and-v8-javascript-from-google/2797#2797
Я не знаю, как добиться этого в движке V8 Js точно, но, как и в мире Python, вы можете просто сделать следующее. ваш класс изображения:
class Image
{
public:
Image(int w, int h);
int Width(void) const;
};
напишите некоторые функции-обертки и выложите эти функции в мир Js:
Image* Image_New(int w, int h) { return new Image(w, h); }
void Image_Delete(Image* pImage) { delete pImage; }
int Image_Width(const Image* pImage) { return pImage->Width(); }
добавьте следующие коды в файл js:
var Image = function (w, h) {
this.image = new Image(w, h);
this.Width = function() {
return Image_Width(this.image);
};
};
и теперь вы можете получить работу с кодом. Кроме того, в приведенных выше кодексах не учитывается механизм сбора мусора, поэтому обратите особое внимание на это. Прошу прощения за мой английский английский!