我对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接口。
任何提示将不胜感激!