我正在编写一个用于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
});
这是预期的行为吗?或代码中有什么问题?
答案 0 :(得分:1)
固定。正如评论alert()
中提到的那样有效但document.writeln()
没有。这是因为document.writeln()
重置包含脚本元素的当前文档,使用document.createElement()
,document.createTextNode()
和朋友来修改当前加载的元素。
对于熟悉HTML / JavaScript的人来说,这可能是常识,对于我们其他人来说,这可能是一个真正的交易。