Javascript 如何在C++;?

Javascript 如何在C++;?,javascript,c++,arrays,message,google-nativeclient,Javascript,C++,Arrays,Message,Google Nativeclient,在我的HTML中 假设我有两个值为3和4的输入字段: <form onchange="reload()"> <h2>Input:</h2> <input type="number" id="val1" name="val1" value="3"> <input type="number" id="val2" name="val2" value="4"> <br><br> <h2>O

在我的HTML中
假设我有两个值为3和4的输入字段:

<form onchange="reload()">
  <h2>Input:</h2>
  <input type="number" id="val1" name="val1" value="3">
  <input type="number" id="val2" name="val2" value="4">
  <br><br>
  <h2>Output</h2>
  <input type="text" id="out" name="out" value="untouched by C++"><br>
</form>

然后我把它发送到我的C++文件来处理消息< /p>

Module.postMessage(msg);
<我的C++文件<>强> >这里是我的症结所在。 我必须处理消息的代码如下

virtual void HandleMessage(const pp::Var& var_message) {
  std::string message = var_message.AsString();
  pp::Var var_reply = pp::Var(message);
  PostMessage(var_reply);
}
问题是它处理字符串[实际上,如果我的msg属于数组类型,它就会崩溃]。

我希望它期望并接受的是数组对象
基本上是这样的:

virtual void HandleMessage(const pp::Var& var_message) {
  pp::Var var_reply =  var_message[0] + var_messgae[1]; // I expect this to be 3+4=7
  PostMessage(var_reply);
}

有人能帮助我找出如何在我的C++中从JavaScript中得到一个数组或一个对象,这样我就可以一起计算值,并把结果返回给JavaScript?< P>我有同样的问题,我想发送一个字符串数组< /p>
var nativeArray = new Array();
nativeArray[0] = "Item 1"
nativeArray[1] = "Item 2"
naclModuleElement.postMessage(nativeArray)
在HandleMessage中没有调用任何内容

发送
nativeArray.length
有效,并在NaCl侧显示“2”

经过一些调查,我发现
pp::Var
类中没有
AsArray()
函数

只有基本体可用


有一个类
pp:VarArrayBuffer
,可用于发送/接收二进制信息。。可能会有帮助(但没有下载其中发布的示例)

我已经解决了我遇到的问题。最好的方法是使用对象并将值作为JSON对象传递,因此

JavaScript中的

values = {
        "val1": Number(document.getElementById('val1').value),
        "val2": Number(document.getElementById('val2').value)
    };
msg = JSON.stringify(values);
Module.postMessage(msg);
然后处理消息并将响应发送回JavaScript

C++中的

在标题中,您需要添加picoJSON来处理JSON,并添加sstream来处理isstringstream

#include <sstream>
#include "picojson.h"
using namespace std;
#包括
#包括“picojson.h”
使用名称空间std;
然后在代码的后面:

virtual void HandleMessage(const pp::Var& var_message) {

        picojson::value v;

        // pass the message that was sent from JavaScript as a string
        // var_message.AsString() will be in form "{\"val1\":4,\"val2\":4}");
        // and convert it to istringstream

        istringstream iss2((string)var_message.AsString());

        // parse iss2 and extract the values val1 and val2
        string err = picojson::parse(v, iss2);

        int val1 = (int)v.get("val1").get<double>();
        int val2 = (int)v.get("val2").get<double>();

        // finally send the message and you'll see the sum in the JavaScript
        PostMessage( val1 + val2 );

  }
virtualvoidhandlemessage(constpp::Var&Var\u消息){
皮科森:价值v;
//以字符串形式传递从JavaScript发送的消息
//var_message.AsString()的格式为“{\'val1\':4,\'val2\':4}”);
//并将其转换为istringstream
istringstream iss2((字符串)var_message.AsString());
//解析iss2并提取值val1和val2
字符串err=picojson::parse(v,iss2);
int val1=(int)v.get(“val1”).get();
int val2=(int)v.get(“val2”).get();
//最后发送消息,您将在JavaScript中看到总和
PostMessage(val1+val2);
}

文档尚未更新,但从
pepper_29
开始,现在有一个
pp::VarArray
接口用于访问阵列

可以看到新C++接口的头文件。

以下是如何使用它(未经测试):

virtualvoidhandlemessage(constpp::Var&Var\u消息){
如果(!var_message.is_array())返回;
pp::VarArray数组(var_消息);
//对数组执行一些操作。。。
uint32_t length=array.GetLength();
双和=0;
对于(uint32_t i=0;i
我已经看到了pp:VarArrayBuffer,但不知道如何使用它。此外,和您一样,我注意到没有“AsArray()”。最可悲的是缺少例子。
virtual void HandleMessage(const pp::Var& var_message) {

        picojson::value v;

        // pass the message that was sent from JavaScript as a string
        // var_message.AsString() will be in form "{\"val1\":4,\"val2\":4}");
        // and convert it to istringstream

        istringstream iss2((string)var_message.AsString());

        // parse iss2 and extract the values val1 and val2
        string err = picojson::parse(v, iss2);

        int val1 = (int)v.get("val1").get<double>();
        int val2 = (int)v.get("val2").get<double>();

        // finally send the message and you'll see the sum in the JavaScript
        PostMessage( val1 + val2 );

  }
virtual void HandleMessage(const pp::Var& var_message) {
  if (!var_message.is_array()) return;

  pp::VarArray array(var_message);

  // Do some stuff with the array...
  uint32_t length = array.GetLength();
  double sum = 0;
  for (uint32_t i = 0; i < length; ++i) {
     pp::Var element = array.Get(i);
     if (element.is_number()) {
       sum += element.AsDouble();
     }
  }

  pp::Var var_reply(sum);
  PostMessage(var_reply);
}