主要内容

创建c++客户端

此示例演示如何编写MATLAB®生产服务器™客户端使用C客户端API。客户端应用程序调用addmatrix编译的函数使用生产服务器编译器应用程序打包可部署存档(MATLAB编译器SDK)部署在共享可部署归档

创建C++MATLAB生产服务器客户端应用程序:

  1. 创建一个名为addmatrix_client.cpp

  2. 使用文本编辑器,打开addmatrix_client.cpp

  3. 将以下include语句添加到文件中:

    #include  #include  .h

    请注意

    的头文件MATLAB生产服务器C客户端API位于MPS_INSTALL美元/客户/c/包括/mps文件夹在哪里MPS_INSTALL美元是要删除的根文件夹MATLAB生产服务器安装。

  4. 添加main()方法到应用程序。

    int main(void){}
  5. 初始化客户端运行时。

    mpsClientRuntime* mpsruntime = mpsInitializeEx(MPS_CLIENT_1_1);
  6. 创建客户端配置。

    mpsClientConfig *配置;mpsStatus status = mpsruntime->createConfig(&config);
  7. 创建客户端上下文。

    mpsClientContext *上下文;状态= mpsruntime->createContext(&context, config);
  8. 创建MATLAB数据输入到函数中。

    Double a1[2][3] = {{1,2,3},{3,2,1}};Double a2[2][3] = {{4,5,6},{6,5,4}};int numIn = 2;mpsArray** inVal = new mpsArray* [numIn];inVal [0] = mpsCreateDoubleMatrix(2、3、mpsREAL);inVal [1] = mpsCreateDoubleMatrix(2、3、mpsREAL);double* data1 = (double *)(mpsGetData(inVal[0]));double* data2 = (double *)(mpsGetData(inVal[1]));for (int i = 0;我< 2; i++) { for(int j=0; j<3; j++) { mpsIndex subs[] = { i, j }; mpsIndex id = mpsCalcSingleSubscript(inVal[0], 2, subs); data1[id] = a1[i][j]; data2[id] = a2[i][j]; } }
  9. 创建MATLAB数据以保存输出。

    int numOut = 1;mpsArray* *outVal = new mpsArray* [numOut];
  10. 调用部署的MATLAB函数。

    指定以下参数作为参数:

    • 客户端上下文

    • 函数的URL

    • 期望产出数

    • 指向mpsArray的输出

    • 输入数

    • 指向mpsArray保持输入

    mpsStatus status = mpsruntime->feval(context, "http://localhost:9910/addmatrix/addmatrix", numOut, outVal, numIn, (const mpsArray**)inVal);

    有关节日功能,请参阅中包含的参考资料MPS_INSTALL美元/客户文件夹,MPS_INSTALL美元你的名字是什么MATLAB生产服务器安装文件夹。

  11. 使用如果陈述

    如果(状态==MPS_OK){}
  12. 内部如果语句,添加代码以处理输出。

    double*out=mpsGetPr(outVal[0]);for(inti=0;i<2;i++){for(intj=0;j<3;j++){mpsIndex subs[]={i,j};mpsIndex id=mpsCalcSingleSubscript(outVal[0],2,subs);std::cout<
                  
  13. 添加一个其他的条款的如果语句来处理任何错误。

    else{mpsErrorInfo error;mpsruntime->getLastErrorInfo(context,&error);std::cout<<“error:”
                  
  14. 释放输入使用的内存。

    for (int i = 0;我< numIn;我+ +)mpsDestroyArray (inVal[我]);删除[]inVal;
  15. 释放输出使用的内存。

    对于(inti=0;i
                  
  16. 释放客户端运行时使用的内存。

    mpsruntime - > destroyConfig(配置);mpsruntime - > destroyContext(上下文);mpsTerminate ();
  17. 保存文件。

    完成的计划应类似于以下内容:

    #include  #include  int main (void) {mpsClientRuntime* mpsruntime = mpsInitializeEx(MPS_CLIENT_1_1);mpsClientConfig *配置;mpsStatus status = mpsruntime->createConfig(&config);mpsClientContext *上下文;状态= mpsruntime->createContext(&context, config);Double a1[2][3] = {{1,2,3},{3,2,1}};Double a2[2][3] = {{4,5,6},{6,5,4}};int numIn = 2;mpsArray** inVal = new mpsArray* [numIn];inVal [0] = mpsCreateDoubleMatrix(2、3、mpsREAL); inVal[1] = mpsCreateDoubleMatrix(2,3,mpsREAL); double* data1 = (double *)( mpsGetData(inVal[0]) ); double* data2 = (double *)( mpsGetData(inVal[1]) ); for(int i=0; i<2; i++) { for(int j=0; j<3; j++) { mpsIndex subs[] = { i, j }; mpsIndex id = mpsCalcSingleSubscript(inVal[0], 2, subs); data1[id] = a1[i][j]; data2[id] = a2[i][j]; } } int numOut = 1; mpsArray **outVal = new mpsArray* [numOut]; status = mpsruntime->feval(context, "http://localhost:9910/addmatrix/addmatrix", numOut, outVal, numIn, (const mpsArray **)inVal); if (status==MPS_OK) { double* out = mpsGetPr(outVal[0]); for (int i=0; i<2; i++) { for (int j=0; j<3; j++) { mpsIndex subs[] = {i, j}; mpsIndex id = mpsCalcSingleSubscript(outVal[0], 2, subs); std::cout << out[id] << "\t"; } std::cout << std::endl; } } else { mpsErrorInfo error; mpsruntime->getLastErrorInfo(context, &error); std::cout << "Error: " << error.message << std::endl; switch(error.type) { case MPS_HTTP_ERROR_INFO: std::cout << "HTTP: " << error.details.http.responseCode << ": " << error.details.http.responseMessage << std::endl; case MPS_MATLAB_ERROR_INFO: std::cout << "MATLAB: " << error.details.matlab.identifier << std::endl; std::cout << error.details.matlab.message << std::endl; case MPS_GENERIC_ERROR_INFO: std::cout << "Generic: " << error.details.general.genericErrorMsg << std::endl; } mpsruntime->destroyLastErrorInfo(&error); } for (int i=0; idestroyConfig(config); mpsruntime->destroyContext(context); mpsTerminate(); }
  18. 编译应用程序。

    要编译客户端代码,编译器需要访问客户:h. 此头文件存储在$MPSROOT/client/c/include/mps/

    要链接应用程序,链接器需要访问存储在中的以下文件$MPSROOT/client/c//lib/

    链接所需的文件

    窗户® UNIX®/ Linux MacOSX
    拱\ lib \ mpsclient.lib美元 $arch/lib/libprotobuf.so arch / lib / libprotobuf.dylib美元
    arch / lib / libcurl.so美元 $arch/lib/libcurl.dylib
    $arch/lib/libmwmpsclient.so $arch/lib/libmwmpsclient.dylib
    $arch/lib/libmwcp11compat.so
  19. 运行应用程序。

    要运行应用程序,请添加存储在中的以下文件$MPSROOT/client/c//lib/到应用程序的路径:

    运行所需的文件

    窗户 UNIX/Linux MacOSX
    拱\ lib \ mpsclient.dll美元 $arch/lib/libprotobuf.so arch / lib / libprotobuf.dylib美元
    拱\ lib \ libprotobuf.dll美元 arch / lib / libcurl.so美元 $arch/lib/libcurl.dylib
    $arch\lib\libcurl.dll $arch/lib/libmwmpsclient.so $arch/lib/libmwmpsclient.dylib
    $arch/lib/libmwcp11compat.so

    客户端调用addmatrix函数,并在控制台中返回以下矩阵:

    5.0 7.0 9.0 9.0 7.0 5.0