我在MATLAB中生成了C ++共享库,并将其集成到C ++的Win32控制台应用程序中。我必须从PHP调用这个控制台应用程序。它有5个输入,应该从PHP传递。当我运行应用程序时,它会运行输入参数。正确运行的代码如下:
#include "stdafx.h"
#include "shoes_sharedlibrary.h"
#include <iostream>
#include <string.h>
#include "mex.h"
using namespace std;
int _tmain(int argc, _TCHAR* argv[])
{
/* Call the MCR and library initialization functions */
if( !mclInitializeApplication(NULL,0) )
{
exit(1);
}
if (!shoes_sharedlibraryInitialize())
{
exit(1);
}
mwArray img= "C:/Users/aadbi.a/Desktop/dressimages/T1k5aHXjNqXXc4MOI3_050416.jpg";
double wt1 = 0;
mwArray C(wt1);
double wt2=0;
mwArray F(wt2);
double wt3=0;
mwArray T(wt3);
double wt4=1;
mwArray S(wt4);
test_shoes(img,C,F,T,S);
shoes_sharedlibraryTerminate();
mclTerminateApplication();
return 0;
}
C,F,T,S是介于0和1之间的值。如何在_TCHAR *中传递输入参数?如何将_TCHAR *转换为十进制或双精度并再次将其转换为mwArray为传递给test_shoes。 test_shoes只接受mwArray作为输入。
test_shoes函数定义是:
void MW_CALL_CONV test_shoes(const mwArray& img_path, const mwArray& Wcoarse_colors,
const mwArray& Wfine_colors, const mwArray& Wtexture, const
mwArray& Wshape)
{
mclcppMlfFeval(_mcr_inst, "test_shoes", 0, 0, 5, &img_path, &Wcoarse_colors, &Wfine_colors, &Wtexture, &Wshape);
}
答案 0 :(得分:2)
您可以使用atof()
中的stdlib.h
函数将命令行字符串参数转换为double。正如我所看到你使用的是TCHAR
等价物,有一个宏包含了对UNICODE
和ANSI
版本的正确调用,所以你可以这样做(假设你的命令行参数)是按正确的顺序)
#include "stdafx.h"
#include "shoes_sharedlibrary.h"
#include <iostream>
#include <string.h>
#include "mex.h"
#include <stdlib.h>
using namespace std;
int _tmain(int argc, _TCHAR* argv[])
{
// ... initial code
// convert command line arguments to doubles ...
double wt1 = _tstof(argv[1]);
mwArray C(wt1);
double wt2 = _tstof(argv[2]);
mwArray F(wt2);
double wt3 = _tstof(argv[3]);
mwArray T(wt3);
// ... and so on ....
}
请注意,argv[0]
将包含命令行中指定的程序名称,因此参数从argv[1]
开始。然后您的命令行可以是:
yourprog.exe 0.123 0.246 0.567 etc.