1

我在 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);
}
4

1 回答 1

2

atof()您可以使用函数 from将命令行字符串参数转换为双精度stdlib.h。正如我看到你正在使用TCHAR等价物,有一个宏包装了正确的调用UNICODEANSI构建,所以你可以做这样的事情(假设你的命令行参数的顺序正确)

#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.
于 2013-05-07T12:13:50.827 回答