|
@@ -29,7 +29,8 @@ void PySetItem(PyObject* args, _variant_t var, int nIndex)
|
|
|
{
|
|
|
case VT_BSTR:
|
|
|
{
|
|
|
- PyTuple_SetItem(args, nIndex, Py_BuildValue("s", var.bstrVal));
|
|
|
+ //PyTuple_SetItem(args, nIndex, Py_BuildValue("s", var.bstrVal));
|
|
|
+ PyTuple_SetItem(args, nIndex, Py_BuildValue("u", var.bstrVal)); // 这里是按宽字节传入python中;
|
|
|
break;
|
|
|
}
|
|
|
case VT_LPSTR: //null terminated string
|
|
@@ -151,23 +152,25 @@ PyObject *CallPython(std::string strPyPath, std::string strPyFuncName, int argc,
|
|
|
PyRun_SimpleString("import sys");
|
|
|
PyRun_SimpleString(szExecuteDir);
|
|
|
|
|
|
+ PyObject *args = NULL;
|
|
|
+ PyObject *pFunc = NULL;
|
|
|
+ PyObject *pRet = NULL;
|
|
|
// 2、导入模块;
|
|
|
PyObject *pModule = PyImport_ImportModule(szFilename);
|
|
|
if ( !pModule )
|
|
|
- return NULL;
|
|
|
+ goto over;
|
|
|
|
|
|
// 3、调用函数;
|
|
|
- PyObject *pFunc = PyObject_GetAttrString(pModule, strPyFuncName.c_str());
|
|
|
+ pFunc = PyObject_GetAttrString(pModule, strPyFuncName.c_str());
|
|
|
if (!pFunc || !PyCallable_Check(pFunc))
|
|
|
- return NULL;
|
|
|
+ goto over;
|
|
|
|
|
|
// 4、导入函数参数;
|
|
|
- PyObject *pRet = NULL;
|
|
|
if ( argc != 0 ) {
|
|
|
#if 0
|
|
|
- PyObject *args = PyTuple_New(argc--);
|
|
|
+ args = PyTuple_New(argc--);
|
|
|
if ( !args )
|
|
|
- return NULL;
|
|
|
+ goto over;
|
|
|
PySetItem(args, var, 0);
|
|
|
// 收集所有变参;
|
|
|
va_list ap;
|
|
@@ -178,9 +181,9 @@ PyObject *CallPython(std::string strPyPath, std::string strPyFuncName, int argc,
|
|
|
}
|
|
|
va_end(ap);
|
|
|
#else
|
|
|
- PyObject *args = PyTuple_New(argc);
|
|
|
+ args = PyTuple_New(argc);
|
|
|
if ( !args )
|
|
|
- return NULL;
|
|
|
+ goto over;
|
|
|
// 收集所有变参;
|
|
|
va_list ap;
|
|
|
va_start(ap, argc);
|
|
@@ -195,6 +198,16 @@ PyObject *CallPython(std::string strPyPath, std::string strPyFuncName, int argc,
|
|
|
}
|
|
|
else
|
|
|
pRet = PyEval_CallObject(pFunc, NULL);
|
|
|
+
|
|
|
+over:
|
|
|
+ if ( pModule)
|
|
|
+ Py_DECREF(pModule);
|
|
|
+
|
|
|
+ if ( argc)
|
|
|
+ Py_DECREF(argc);
|
|
|
+
|
|
|
+ if ( pFunc)
|
|
|
+ Py_DECREF(pFunc);
|
|
|
|
|
|
return pRet;
|
|
|
}
|
|
@@ -284,16 +297,27 @@ int _tmain(int argc, TCHAR* argv[], TCHAR* envp[])
|
|
|
#else
|
|
|
Py_Initialize();
|
|
|
|
|
|
+ // C:\Users\scbc.sat23\bin\SATHelper\scripts
|
|
|
//PyObject *pRet = CallPython("F:\\SAT\\SAT_API\\ssat_sdk\\device_manage\\testWizardClient.py", "API_UsbSwitch", 4,
|
|
|
- PyObject *pRet = CallPython("test.py", "_print", 4,
|
|
|
+
|
|
|
+ /*PyObject *pRet = CallPython("test.py", "_print", 4,
|
|
|
// 变参一定要强转;
|
|
|
_variant_t(1),
|
|
|
_variant_t(2),
|
|
|
_variant_t("aaa"),
|
|
|
_variant_t("bbb"));
|
|
|
+*/
|
|
|
+
|
|
|
+ PyObject *pRet = CallPython("C:\\Users\\scbc.sat23\\bin\\SATHelper\\scripts\\TVUpgrade.py",_T("API_TVUpgrade"), 3,
|
|
|
+ _variant_t(1),
|
|
|
+ _variant_t(2),
|
|
|
+ _variant_t(2));
|
|
|
|
|
|
pRet = CallPython("test.py", "Hello", 0);
|
|
|
|
|
|
+ if ( pRet)
|
|
|
+ Py_DECREF(pRet);
|
|
|
+
|
|
|
Py_Finalize();
|
|
|
#endif
|
|
|
system("pause");
|