Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/visual-studio-2012/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
从PHP接收可变变量输入到C++_Php_C++_Variables_Call - Fatal编程技术网

从PHP接收可变变量输入到C++

从PHP接收可变变量输入到C++,php,c++,variables,call,Php,C++,Variables,Call,我有一个程序需要发送以下变量: 布尔整型字符串向量 这将来自一个PHP调用,正如我所研究的和 看看int argc,char**argv[],我知道您可以将各种参数传递给运行程序所需的程序,但这些参数都是一个参数 我的问题是:如果可能的话,你如何在PHP调用中跨多个不同的变量发送到C++程序? 编辑问题继续…函数调用是什么样子的 它是否简单到不使用int argc、char**argv[]并只执行以下操作: int main(bool var1, int var2, std::vector<

我有一个程序需要发送以下变量:

布尔整型字符串向量

这将来自一个PHP调用,正如我所研究的和

看看int argc,char**argv[],我知道您可以将各种参数传递给运行程序所需的程序,但这些参数都是一个参数

我的问题是:如果可能的话,你如何在PHP调用中跨多个不同的变量发送到C++程序? 编辑问题继续…函数调用是什么样子的

它是否简单到不使用int argc、char**argv[]并只执行以下操作:

int main(bool var1, int var2, std::vector<std::string> var3, std::string var4)
{
...
}

因为这似乎使int ARC,char **avg[]有多余的冗余性。

您可以使用Exc:

在PHP中执行C++程序。

将把$$内容作为命令行参数传递给C++程序。在mainit argc、char**argv中,您可以通过argc和argv访问此数据

为了一次传递多个变量,您应该使用某种类型的。这将把变量的内容转换成一个字符串,然后作为命令行参数再次传递。 您只需确保C++端知道如何将该字符串序列化为正确的变量/数据类型。 有很多种可能性,从发明你自己的格式到使用一种已建立的格式来实现

我想到了JSON、XML等格式。您甚至可以使用方法实现某些东西

为了让事情更清楚,我们假设您希望将这些数据从PHP传递到C++:

$var1 = false;
$var2 = 123;
$var3 = array("some","string","data");
$var4 = "anotherstring";
让我们进一步假设您有一个PHP函数my|u serialize,它将数组$var1、$var2、$var3、$var4转换为虚构的序列化格式false | 123 | |另一个字符串:


使用上面列出的一种序列化方法,您不必关心MySySerialMyExalItalI化和MyOracRealItI化的实现细节。

可以使PHP作为一个新进程执行C++程序,请参见。如果要传递复杂的参数,可能需要以某种方式序列化参数。更复杂的方法是编译C++程序作为一个库,并使用类似的东西加载它,虽然我只是猜测,因为我没有经验。ExEC确实看了要走的路,但是使用Excel传递命令,序列化或不,我会设置函数INTARC,CHAR**ARGV[]或BoO-VAR1,INTARV2,STD::向量VAR3,std::string var4?您必须始终使用int argc,char**argv[]我在下面的回答中已经说过:您必须将数据序列化为字符序列。您不能这样分配它。我更新了我的答案
$var1 = false;
$var2 = 123;
$var3 = array("some","string","data");
$var4 = "anotherstring";
$serialized_data = my_serialize(array($var1, $var2, $var3, $var4));
// $serialized_data  == "false|123|<some,string,data>|anotherstring"

// invoke your program and pass the data
exec("./your_program.exe '$serialized_data'", $output);
int main(int argc, char** argv)
{
    std::cout << argv[1] << std::endl;
    MyData data = my_deserialize(argv[1]);
    std::cout << data.var4 << std::endl; // outputs "another string"
}