C/C++实战004:python调用c++的dll文件

      前面我们生成了dll文件,接着我们需要来用python调用我们的dll文件了,前面我用string带入参数总是出现错误,首先是python找不到fanuc函数(这是我在dll里面定义的函数名称)。

 之前添加一个头文件进行宏定义,这里我新增了一个fanuc.h头文件。

#include <string>
using namespace std;
//定义宏
#ifdef DL1_API
#else
#define DL1_API extern "C" _declspec(dllimport) 
#endif
 
DL1_API string transmission(string ip,string path);

 执行之后又报错:OSError: exception: access violation writing 0x0055002F,找半天也没找到有关的信息,

翻译:OSError:异常:访问违规写入0x0055002F

接着报错:指定的 C 链接,但返回了与 C 不兼容

警告	1	warning C4190: “transmission”有指定的 C 链接,但返回了与 C 不兼容的 UDT“std::basic_string<_Elem,_Traits,_Alloc>”	e:\projects\fanucnc\fanucnc\fanuc.h	9	1	FanucNC

这次没报错,也没有返回任何信息,头疼........ 

 

 在函数中加句输出语句:printf(" i come here");,但是其他返回信息却没有...

 前面提示 :警告    1    warning C4190: “fanuc”有指定的 C 链接,但返回了与 C 不兼容的 ,但改成char*就可以了,说明c返回值 不兼容string,所以在传入值中用string应该也有问题

char* fanuc(char* ipaddr,char*  pathName);
{
    //内容省略****
}

那么新的问题也来了,c++中接受的是char*类型,那么意味着python传进来的值也应该是相同的类型,否知一样无法识别

from ctypes import *
dll=CDLL('FanucNC.dll')
ip='10.143.60.136'
path='C:/Users/ICCN6079/Desktop/FanucNC/Debug/O0001.NC'
value=dll.fanuc(ip,path)
print(value)

这里我们把python也修改一下,将字符串进行转义,换成字节类型

from ctypes import *
dll=CDLL('FanucNC.dll')
ip=bytes('10.143.60.136',encoding='utf-8')
Path=bytes('C:/Users/ICCN6079/Desktop/FanucNC/Debug/O0001.NC',encoding='utf-8')
value=dll.fanuc(ip,Path)
print(value)

这样两边就对接好了,再次执行我们就可以获取到当前函数的返回值了。

现在还有个问题需要解决的就是,int类型返回正常,但是用char*作为返回类型的话收到的是地址符,并不是字符串,这样python这边不无法分辨接受到的信息了,求大神指点一二了。

首发百度经验 :  C/C++实战004:python调用c++的dll文件

欢迎关注本人的公众号:编程手札,文章也会在公众号更新

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

ProgramNotes

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值