0

我对javascript真的很陌生,我正在编写一个API来从下面运行的c++代码中获取服务器状态。我知道这个问题可能(或可能不)取决于项目,但我只是想知道是否有人对这里可能出现的问题有所了解。

所以我想调用“manager.cpp”上的c++实现的“checkServerStatusCpp()”函数。(我正在重用别人的代码,我需要做的就是编译,界面会自动生成。我会附上尽可能多的信息。)

我发现如果将我的调用包装在一个函数中,将执行本机 C++ 代码。

a = function(){ manager.getServerStatusCpp(); };
a();  // no problem calling the function in Manager.cpp

否则将无法正常工作

manager.getServerStatusCpp();  
// function getServerStatusCpp() in Manager.cpp is never called. 

这是我的相关文件。

主页.html

<!DOCTYPE html>
  <head>
    <!-- all other js/css files are in here. -->

    <script type="text/javascript" src="js/interface.js"></script>
    <script type="text/javascript" src="js/system.media.manager.js"></script>
    <script type="text/javascript" src="js/man.js"></script>
  </head>

  <body>

    <fieldset> <legend> <b> server status </b> </legend>
      <div class="pad10">    
        <p> <a onclick="refresh()" id="refresh" href="#"> Refresh </a></p>
      </div>
    </fieldset>


    <script>
    var manager = new System.Manager("1");

    function refresh() {
        // this works - the native function will be called.
        a = function(){manager.getServerStatusCpp();};
        a();

        // if i put this the function in C++ will not be executed.
        manager.getServerStatusCpp();
    }
    function onGetServerStatus(myObject) {
        //do something
    };

    </script>

  </body>
</html>

man.js (我正在重写自动生成的函数 where)

System.Manager = System.Media.IManager.extend({

    init : function(instance) {
        this._super(instance);
        this.count = 0;
    },

    getServerStatusCppCallback: function( myObject ) {
        console.log("getServerStatusCpp-->"  + JSON.stringify(myObject));
        onGetServerStatus(myObject);
    },   

});

system.media.manager.js(这个文件是自动生成的)

System.Media = System.Media || {};
System.Media.IManager = System.Interface.extend({

    init : function(instance) {
        this._super("System::IManager", instance);
    },

    getServerStatuCppsCallback: function(  myObject ) {
        console.log("getServerStatusCpp-->"  + JSON.stringify(myObject));
    },
    getServerStatusCpp: function() {
        this.call(
        {"method": "IManager::getServerStatusCpp", "params":{ } }, this.getServerStatusCppCallback, []);
    },

});
    /**
     * End of IManager interface
    */

});

注:Manager.cpp、Manager.h为原生c++代码,IManager.h实现js接口。

任何提示将不胜感激!

4

0 回答 0