【发布时间】:2017-01-16 11:55:11
【问题描述】:
我正在尝试使用 ctypes 通过 Python 移植一些 C dll(FANUC FOCAS 库 - 用于 CNC)代码,所以我编写了移植代码。 (如下),但是在加载 DLL 并调用函数时得到一个非常奇怪的结果。就我而言,我不明白在 python 中使用处理程序。
我想在python中应用以下c代码。
声明(针对 c)
#include "fwlib64.h"
FWLIBAPI short WINAPI cnc_allclibhndl3(const char *ipaddr,unsigned short port,
long timeout, unsigned short *FlibHndl);
示例代码(在 c 的 focas 库手册中)
#include "fwlib64.h"
void example( void )
{
unsigned short h;
short ret;
ODBST buf;
ret = cnc_allclibhndl3( "192.168.0.100", 8193, 1, &h ) ;
//
if ( !ret ) {
cnc_statinfo( h, &buf ) ;
cnc_freelibhndl( h ) ;
} else {
printf( "ERROR!(%d)\n", ret ) ;
}
}
Testfocas.py
from ctypes import *
mylib = cdll.LoadLibrary('./Fwlib64.dll')
class ODBSYS(Structure):
pass
_fields_ =[
("dummy", c_ushort),
("max_axis", c_char*2),
("cnc_type", c_char*2),
("mt_type",c_char*2),
("series",c_char*4),
("version",c_char*4),
("axes",c_char*2),]
h=c_ushort()
pt=pointer(h)
ret=c_short()
buf=ODBSYS()
ret=mylib.cnc_allclibhndl3('192.168.0.100',8193,1,pt)
mylib.cnc_statinfo(h,buf)
mylib.cnc_freelibhndl(h)
我希望函数返回 0 或 -16,但在我的情况下,函数返回是
cnc_allclibhndl3 = 65520(我猜是开放端口)
cnc_statinfo = -8
cnc_freelibhndl -8
数据窗口函数的返回状态
EW_OK(0) Normal termination
EW_SOCKET(-16) Socket communication error Check the power supply of CNC, Ethernet I/F board, Ethernet connection cable.
EW_HANDLE(-8) Allocation of handle number is failed.
我不知道我做错了什么。
【问题讨论】: