做Web开发,用到了flask框架,后台用的语言是Python,核心算法采用C++,C++已经封装好双向的接口,输入已经成功被Python代码接收,输出封装的是一个char * 类型的字符串返回值(这一部分有问题)。下面是python的代码
#!/usr/bin/python
# -*- coding: utf-8 -*-
import ctypes
from ctypes import *
def PlateRecognize(Url):
Objdll = ctypes.windll.LoadLibrary(“E:/PlateRecognizeDLL/x64/Debug/plateRecognizeDll.dll”)
#Objdll.plateRecognize1.restype = c_char_p
Url1 = Url.strip()
result = Objdll.plateRecognize1(Url1)
print result
return result
得到的result值是一个int类型的值,而不是本人所需要的字符串,问一下问题出在什么地方,怎么样修改才能得到字符串
#!/usr/bin/python
# -*- coding: utf-8 -*-
import ctypes
from ctypes import *
def PlateRecognize(Url):
Objdll = ctypes.windll.LoadLibrary(“E:/PlateRecognizeDLL/x64/Debug/plateRecognizeDll.dll”)
#Objdll.plateRecognize1.restype = c_char_p
Url1 = Url.strip()
result = Objdll.plateRecognize1(Url1)
print result
return result
得到的result值是一个int类型的值,而不是本人所需要的字符串,问一下问题出在什么地方,怎么样修改才能得到字符串
解决方案
40
说在前面,建议还是去看看Extending Python with C or C++
直接把dll,so封装成PYTHON无缝识别的代码用起来最方便,代码管理上也清晰。
再或还有boost.python或SWIG 来自动生成接口也是不错的。
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
使用ctypes模块,传入参数需要包装成C类型,如下图。
返回值需要使用ret.value来访问python基本类型。
要想理解使用,还是需要看文档https://docs.python.org/2.7/library/ctypes.html
直接把dll,so封装成PYTHON无缝识别的代码用起来最方便,代码管理上也清晰。
再或还有boost.python或SWIG 来自动生成接口也是不错的。
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
使用ctypes模块,传入参数需要包装成C类型,如下图。
返回值需要使用ret.value来访问python基本类型。
要想理解使用,还是需要看文档https://docs.python.org/2.7/library/ctypes.html