DLL 函数内部调用了 PYthon ; DLL 函数在 C++中调用一切正常;
然后,在 py 中通过 ctypes 模块再来反调用此 DLL 函数(出口转内销?),就会抛异常:
OSError: exception: access violation reading 0x0000000C
以上,是何原因?
#-----------encode.py-----------------
def myencode(wcs):
if isinstance(wcs,str):
return wcs.encode()
return wcs
#----------------------------------------
// c++中原型:
char* encode(const wchar_t* wcs)
{
Py_Initialize();
if(!Py_IsInitialized()) return NULL;
using pyPtr = PyObject*;
pyPtr pmod = PyImport_ImportModule("encode"); // 调用 encode.py 模块
pyPtr pfunc = PyObject_GetAttrString(pmod,"myencode"); //encode.myencode
pyPtr pargs = Py_BuildValue("(u)",wcs);
pyPtr pres = PyEval_CallObject(pfunc,pargs);
char * r;
PyArg_Parse(pres,"y",&r);
Py_Finalize();
return r;
}
#----------------------------------------------
#--- 最后是 PY 中的测试代码 test.py----
from ctypes import CDLL
path = r'c:\test\Myencode.dll'
dll = CDLL(path)
dll.encode.restype = c_char_p
print( dll.encode("中华人民共和国") )
这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。
V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。
V2EX is a community of developers, designers and creative people.