python调用dll中的函数时报错

dll代码如下:extern"C"_declspec(dllexport)voidThin(char*p);voidThin(char*p){p[0]='d';}pyth... dll代码如下:
extern "C" _declspec(dllexport) void Thin(char* p);
void Thin(char* p)
{ p[0] = 'd'; }

python代码如下:
a = 'hello'
p = ctypes.c_char_p()
p.Value = a
dll.Thin(p)
print p.Value

错误提示: WindowsError: exception: access violation writing 0x00000000
展开
 我来答
bdwisyou7d
2013-09-07 · TA获得超过1.3万个赞
知道大有可为答主
回答量:3774
采纳率:81%
帮助的人:1086万
展开全部
似乎代码里没有看到你没有加载DLL啊。
另外你在c里直接改写python的内存可能不太妥当。通常是在C里构造后,再返回到python里去。

从你的程序上看,调用完Thin后,你的变量p似乎变成了空指针。

ctypes调用DLL通常都是别人做好的DLL,没有办法才自己去调用。这里有好多麻烦事情。

如果是自己写代码,通常会建议你用cython这个模块。很容易就实现接口。你也不用担心这些变量类型与接口封装的问题。

另外我印象中dll似乎与编译器也有关系。用VC可能容易些。用BC,或者是GCC就麻烦些。

另外还有版本的问题,64位与32位不能通用。

原则上讲,你这种用法,也不是不可以,可能还是哪个地方没有弄对。比如编译参数。你可以试试用return type把数据带回来。而不是用指针写内存。

因为p目前按理它是常量,很有可能调用机制中,不会让你改写它。
追问
cython怎么用呀?
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式