多次调用编组的COM接口

时间:2015-04-25 14:33:28

标签: javascript javascript-events com event-handling activex

我正在编写一个用于JavaScript消费的COM对象。 JavaScript代码在托管的WebBrowserControl中运行。我需要从COM对象发出一些事件到JavaScript,这是Dr. Dobbs

的优秀指南

e.g。 我在* .idl

中有以下内容
Bitmap image;
Matrix m;
.
.
.
public YourClass(){
    m = new Matrix();
    image = Bitmap.createBitmap(image, 0, 0, width, height,);
}
.
.
.
public void mainGameLoop(Canvas c){
    m.setRotate(angle, imageCenterX, imageCenterY);
    yourCanvas.drawBitmap(image, m, null);
}

JavaScript方法在C ++代码中以IJSCallback { void Listen(IDispatch* pJSMethod); } 形式接收,该代码将被存储以便稍后从另一个线程调用它。 无论使用什么方法进行编组(IDispatch*CoMarshalInterThreadInterfaceInStream),事件触发线程只能调用一次JavaScript函数。之后IGlobalInterfaceTable返回IDispatch::Invoke()

示例JavaScript代码

E_ACCESSDENIED

C ++主题很简单。

var server = new ActiveXObject("prog_id")
var.Listen(function(ip_add) {
    // ip_add from COM object
});

这是预期的行为吗?或代码中有什么问题?

1 个答案:

答案 0 :(得分:1)

固定。正如评论alert()中提到的那样有效但document.writeln()没有。这是因为document.writeln()重置包含脚本元素的当前文档,使用document.createElement()document.createTextNode()和朋友来修改当前加载的元素。

对于熟悉HTML / JavaScript的人来说,这可能是常识,对于我们其他人来说,这可能是一个真正的交易。