将Javascript对象转换为JSAPIPtr时发生错误的变量强制转换异常

将Javascript对象转换为JSAPIPtr时发生错误的变量强制转换异常,javascript,c++,com,firebreath,Javascript,C++,Com,Firebreath,我正在初始化一个Javascript对象,并将其传递给一个注册的API函数,该函数的签名如下: 我检查了来自Javascript的变量对象是否为空 JS文件 当我按下按钮时初始化调用的函数 function Initialize() { var Class=function(){this.member1_JS='Red'}; BorderStyle.prototype.member2_JS='1'; var obj=new Class(

我正在初始化一个Javascript对象,并将其传递给一个注册的API函数,该函数的签名如下:

我检查了来自Javascript的变量对象是否为空

JS文件

当我按下按钮时初始化调用的函数

 function Initialize() 
    {
        var Class=function(){this.member1_JS='Red'};
        BorderStyle.prototype.member2_JS='1';
        var obj=new Class();
        plugin().DoTheChanges(obj);

    }
=======================================================

它应该是:

_jsObjPtr= objectFromJavaScript.convert_cast<FB::JSObjectPtr>();
\u jsObjPtr=objectFromJavaScript.convert_cast();
来自javascript的任何对象都是JSObjectPtr;如果它对JSAPSIPR做了一个转换,它会试图在JSObjectPtr内部找到一个你创建的C++ JSAPI对象(例如DICOMAPI对象),因为大多数浏览器都隐藏得太深,无法返回,所以

< P>应该是:

_jsObjPtr= objectFromJavaScript.convert_cast<FB::JSObjectPtr>();
\u jsObjPtr=objectFromJavaScript.convert_cast();

来自javascript的任何对象都是JSObjectPtr;如果它正在对JSAPSIPR进行转换,那么它将试图在JSObjectPtr内部找到一个C++(你可以创建)的对象,例如,一个DICOMAPI对象,它在大多数浏览器上实际上都不起作用,因为它们隐藏得太深,无法返回。< /P>我可以将FB::For变量转换成一个C++类指针,扩展FB::JSAPIAuto?我试过了,但投得不好。还有其他方法吗?这取决于它里面有什么,但可能没有;问题是,当JSAPI对象进入页面时,它会被包装在一些东西中,然后再被发送回许多浏览器,因此您无法从中获取底层类型。我建议为对象的每个实例分配一个唯一的id,并在全局std::map或类似的东西中存储一个弱的ptr;然后调用
->Invoke(“getId”,FB::variant_list_of()).convert_cast()在它上面(你必须添加getId方法)并使用该int来获取对象。我找到了一种方法来通过此异常(请参见编辑),但是我在以这种方式访问COM组件时遇到了一个系统冲突异常。我缺少什么吗?我正在失去线程的跟踪;如果你需要讨论,最好在谷歌组上提问,如果是一个新问题,问一个新的问题,我能把FB::变量转换成一个C++类指针,扩展FB::JSAPIAuto?我试过了,但投得不好。还有其他方法吗?这取决于它里面有什么,但可能没有;问题是,当JSAPI对象进入页面时,它会被包装在一些东西中,然后再被发送回许多浏览器,因此您无法从中获取底层类型。我建议为对象的每个实例分配一个唯一的id,并在全局std::map或类似的东西中存储一个弱的ptr;然后调用
->Invoke(“getId”,FB::variant_list_of()).convert_cast()在它上面(你必须添加getId方法)并使用该int来获取对象。我找到了一种方法来通过此异常(请参见编辑),但是我在以这种方式访问COM组件时遇到了一个系统冲突异常。我缺少什么吗?我正在失去线程的跟踪;如果你需要讨论,最好在谷歌群上提问,如果是新问题,就提出新问题