dengzedong
2025-04-15 cddcd262f1a0e142847c0fc4bff7d1ffb86cdac0
iailab-module-model/iailab-module-model-biz/src/main/resources/template/cpp.vm
@@ -17,12 +17,27 @@
   {
      PyGILThreadLock lock;
      PyObject* pModule = create_py_module("${pyModule}.${pyName}");
      jclass hashmapClass = env->FindClass("java/util/HashMap");
      jmethodID getMID = env->GetMethodID(hashmapClass, "get", "(Ljava/lang/Object;)Ljava/lang/Object;");
      jstring keyJString = env->NewStringUTF("pyFile");
      jobject javaValueObj = env->CallObjectMethod(settings, getMID, keyJString);
      jstring javaStringValue = (jstring)javaValueObj;
      const char* strValue = env->GetStringUTFChars(javaStringValue, NULL);
      //*************导入模型******************
      PyObject* pModule = create_py_module(strValue);
      // 释放java占用内存
      env->ReleaseStringUTFChars(javaStringValue, strValue);
      env->DeleteLocalRef(javaStringValue);
      env->DeleteLocalRef(javaValueObj);
      env->DeleteLocalRef(keyJString);
      env->DeleteLocalRef(hashmapClass);
      if (pModule == NULL)
      {
         cout << "model error" << endl;
         throw "模块调用失败!";
      }
      cout << "load pymodel finished" << endl;
      //*************导入函数******************
      PyObject* pFunc = PyObject_GetAttrString(pModule, "${entity.methodName}");
@@ -31,6 +46,7 @@
         cout << "func error" << endl;
         throw "函数调用失败!";
      }
      cout << "load pyfunc finished" << endl;
#{foreach} ($column in [1..$entity.dataLength])
      PyObject* data_${column} = ConvertJdarrToPydarr(env, data${column});
#{end}
@@ -70,6 +86,18 @@
         cout << "return error" << endl;
         throw "函数返回值异常!";
      }
      cout << "load pyreturn finished" << endl;
      PyObject* json_module = create_py_module("json");
      PyObject* dumps_func = PyObject_GetAttrString(json_module, "dumps");
      PyObject* json_str = PyObject_CallObject(dumps_func, PyTuple_Pack(1, pReturn));
      if (json_str == NULL) {
      cout << "json_str is null" << endl;
      PyErr_Print();
      return NULL;
      }
      const char* json_cstr = PyUnicode_AsUTF8(json_str);
      cout << "pyreturn" << json_cstr << endl;
      //*******************返回数据封装************************
      // 开辟返回数据内存空间,转换数据,拆分数据
@@ -78,35 +106,8 @@
      if (result == NULL)
      {
         cout << "ConvertPydictToJhmap error" << endl;
         throw "函数返回值异常!";
         throw "函数返回值解析异常!";
      }
      /*delete pModule;
      pModule = nullptr;
      delete pModule;
      delete pFunc;
      pFunc = nullptr;
      delete pFunc;
#{foreach} ($column in [1..$entity.dataLength])
      delete[] data_${column};
      data_${column} = nullptr;
      delete data_${column};
#{end}
#{if}($entity.model==1)
      delete model_path;
      model_path = nullptr;
      delete model_path;
#{end}
      delete settings_1;
      settings_1 = nullptr;
      delete settings_1;
      delete[] pArg;
      pArg = nullptr;
      delete pArg;*/
      return result;
   }