值得注意的是,对于一个纯python程序,更适合使用要调用的c程序。如果python程序包含其他第三方库,调用很可能出错,它不是容易找到原因。通常一个大型python项目,如SSD目标探测、等等,需要调用很多第三方库,和多个模块是相互交织在一起的,虽然当你配置的路径与python项目环境,相对路径是理解,理论上应该没有问题,但是在实践中仍然会有一些兴奋的错误,如果你只想使用生成的python项目的结果,你可以通过文件的连接。这里是一个简短的描述如何调用c语言python1,环境配置①配置和项目是一样的解释器pytho环境中。例如,如果您使用一个X64 python环境中,X64的VS项目必须配置。
如果你不改变它,它将报告一个错误。配置完成后,让我们看一个简单的示例2。一个例子demo_ #编码:utf-8import osdef运行(com):返回comdef主要():打印(运行((\u201C4\u201D,3)))if __name__ = =\u201C__main__\u201D:主要()来源。cppusing名称空间性病;int main () {\/ \/ python调用* * * * * * \/ \/ \/ \/初始化python模块Py_Initialize(); \/ \/如果(检查是否初始化成功!Py_IsInitialized ()) {cout <
} PyObject * pModule; PyObject * pFunc =零;PyObject * pArg =零;PyRun_SimpleString(\u201C进口sys\u201D); PyRun_SimpleString (\u201C(\u201D。\/ ')\pModule = PyImport_ImportModule (demo_test \\u201D、\u201C世界helllo ! \vcxproj文件的位置由\u201C。\u201D,上层目录是用\u201C\u2026\u2026\u201D没关系,如果你不明白上面的函数。下面是一个完整和详细的介绍。在头文件api是什么?
(R\u201D(a + = ' qwer ') \\/ \/测试:Python文件名称,如果脚本是错误的,返回空PyRun_SimpleString(\u201C进口操作系统\u201D);3.Python变量赋值。值,使用Py_BuildValue: Py_BuildValue (\Py_BuildValue(\u201C(我)\u201D,123年)(123年)Py_BuildValue (\u201C(2)\u201D、123、456)(123、456)Py_BuildValue(\u201C(我)\PyObject * pDict = PyDict_New ();\/ \/创建一个字典类型变量PyDict_SetItemString (pDict,\u201C名字\u201D,Py_BuildValue (\u201Cs\u201D、\u201CWangYao\u201D));
\/ \/填充数据字典类型变量PyTuple_SetItem (pArgs 0 pDict); \/ \/ 0\u2014\u2014序列号添加字典类型变量参数元组。构建对象后,设置成Python通过PyObject_SetAttrString: PyObject * ps = PyUnicode_DecodeUTF8 (val, strlen (val),\u201C忽略\u201D);\/ \/构造一个对象PyObject_SetAttrString (p_main_Module、关键、ps);\/ \/设置4,先Python变量的值的指针变量,然后解析通过PyArg_Parse pModule = PyImport_ImportModule (\u201C__main__\u201D);
\/ \/得到全局变量int大小= PyDict_Size (pReturn); PyObject * pNewAge = PyDict_GetItemString (pReturn,\u201C年龄\u201D);int新时代;PyArg_Parse (pNewAge,\u201C我\u201D,新时代);分析元组:int好;好吧= PyArg_ParseTuple (args,\u201Cs\u201D,谨此告知);\/ \/ Python调用:f(哎呀!)好= PyArg_ParseTuple (args,\u201C那\u201D,,大部分l,谨此告知);\/ \/ Python调用:f (1 2 3) ok = PyArg_ParseTuple (args,\u201C(2)年代#\u201D,我,j,谨此告知,大小);
\/ \/ Python调用:\/ \/(\u201C垃圾邮件\u201D)\/ \/ f(\u201C垃圾邮件\u201D,\u201Cw\u201D) \/ \/ f(\u201C垃圾邮件\u201D,\u201C白平衡\u201D,100000)5。调用的Python函数PyObject * pfun = PyObject_GetAttrString (pModule\u201Ctestdict\u201D);\/ \/ testdict: Python文件中的函数名PyObject * pReturn = PyEval_CallObject (pfun pArgs);\/ \/调用函数6。
静态PyObject * emb_numargs (PyObject *自我,PyObject * args) \/ \/ c函数{如果!PyArg_ParseTuple (args \},{零,零,0,零}};静态PyModuleDef EmbModule ={\/ \/模块声明PyModuleDef_HEAD_INIT,\u201C循证\u201D,NULL, 1, EmbMethods, NULL, N妳,空,空};静态PyObject * PyInit_emb (void) \/ \/模块初始化函数{返回PyModule_Create (&EmbModule);} \/ \/添加一个模块:PyImport_AppendInittab(\u201C循证\u201D,&PyInit_emb);