大话2没有找到xlue.dllpython23.dll

Posts - 126,
Articles - 1,
Comments - 482
记录无常工作上的点点滴滴
23:36 by 无常, ... 阅读,
朋友的公司是做GPS的,上周联系到我要帮做个程序把他们平台的车辆定位跟踪数据和省里的平台对接。看一下官方提供的三个文档,洋洋洒洒共一百多页,一大堆协议的定义甚是齐全,好在官方的文件中也带有个封装好通信功能的DLL和一个调用此接口的c++ DEMO程序,既然有现成的可用,那就不必去看他的协议了。
说实话,参加工作之后就基本没用过c++,生疏了。特别是要用c++操作数据库,对我来说比割几刀还要痛苦。官方的API中已经很详尽,要做的就是从现有平台的数据库中获取车辆定位信息,通过官方的API发送到省中心平台。
本想用C#给官方API做个包装,省得再去动用C++,可是看到此API中定义有几个Struct,而且下行数据都是通过回调函数方式提供,google了一下,似乎C#对调用有回调函数的C DLL不是很顺畅,于是放弃了,想到了。
一、Python之ctypes
是的一个外部库,提供和C语言兼容的数据类型,可以很方便地调用C DLL中的函数。在Python2.5官方安装包都带有 1.1版。ctypes的官方文档在。
ctypes的使用非常简明,如调用cdecl方式的DLL只需这样:
from ctypes import *;
h=CDLL('msvcrt.dll')
h.printf('a=%d,b=%d,a+b=%d',1,2,1+2);
以上代码运行后输出 a=1,b=2,a+b=3。
二、加载库和普通函数的调用
官方API提供的库中有几个主要的函数:
int DCSPCLIENTDLL InitInterface( const char *pCenterIP, const unsigned short nUpLinkSvrPort,const unsigned short nDownLinkSvrPort );
//释放资源
int DCSPCLIENTDLL FiniInterface( void );
int DCSPCLIENTDLL Login( const unsigned int uiBranchPlatformID, const unsigned int nUserID,
const char *pPassword );
int DCSPCLIENTDLL Logout( const unsigned int uiBranchPlatformID, const unsigned int nUserID,
const char *pPassword );
//发车辆实时定位数据
int DCSPCLIENTDLL SendUPRealLocation( const char * const pDeviceId,
const char cDeviceColor,
const unsigned short nMsgCode, const _stBPDynamicData * const pStGpsData );
在Python中加载使用:
from ctypes import *
#加载API库
api = CDLL('DCSPClientDLL.dll');
#初始化函数的参数类型
api.InitInterface.argtypes=[c_char_p,c_ushort,c_ushort]
api.Login.argtypes=[c_uint,c_uint,c_char_p]
api.Logout.argtypes=[c_uint,c_uint,c_char_p]
#初始化并登录
api.InitInterface(u"中心服务器地址" , u'上行服务端端口' , u'下行客户端端口')
api.Login(platformID,userID,password);
#.....其它操作
api.Logout(platformID,userID,password); #注销
参数类型可以像上面的代码一样预先设定好,或者在调用函数时再把参数转成相应的c_***类型。ctypes的类型对应如下:
如此,完成了简单的第一步。
三、C语言中的Struct数据结构
在发送实时定位数据的函数SendUPRealLocation中有一个参数是结构体类型 _stBPDynamicData。python中没有struct这种数据结构,ctypes很周全,对C的struct和union这二种数据类型都提供很好的支持。stBPDynamicData结构的定义如下:
// 车辆动态数据结构体
struct _stBPDynamicData
// 加密状态
// GPS 时间
_StructTime gpsT
// GPS速度
unsigned short unGpsS
// 行驶记录仪速度
unsigned short unTachographS
// 车辆当前总里程数
unsigned int uiMileageT
// 车辆状态
// 报警状态
在python中,需要定义一个与这兼容的类,继承于ctypes.Structure,其中还用到一个_StructTime结构,这里一并贴出代码:
class _StructTime(Structure):
_fields_ =[('day',c_ubyte),
('month',c_ubyte),
('year',c_ushort),
('hour',c_ubyte),
('minute',c_ubyte),
('second',c_ubyte)];
def __str__(self):
return '{0}-{1}-{2} {3}:{4}:{5}'.format(self.year,self.month,self.day,self.hour,self.minute,self.second);
class _stBPDynamicData(Structure):
_fields_ =[('encrypt',c_ubyte),
('gpsTime',_StructTime),
('longitude',c_uint),
('latitude',c_uint),
('unGpsSpeed',c_ushort),
('unTachographSpeed',c_ushort),
('uiMileageTotal',c_uint),
('angle',c_ushort),
('state',c_ushort),
('alarm',c_ushort)];
def __str__(self):
return u'({0},{1}),{6},sp:{2},angle:{3},st:{4},al:{5}'.format(self.longitude,
self.latitude,self.unGpsSpeed,
self.angle ,self.state,self.alarm,self.gpsTime );
class gpsData(Structure):
_fields_ =[('strDeviceID',c_char_p),
('cDeviceColor',c_char),
('nMsgCode',c_ushort),
('stBPD',_stBPDynamicData)];
def __str__(self):
return u'{0},{1}'.format(self.strDeviceID,self.stBPD );
gpsData是我自己加的一个类,用于记录每辆车的信息。
现在就可以使用SendUPRealLocation函数发送车辆实时数据了:
tm=_StructTime();
tm.year=2010;tm.month=4;tm.day=3;tm.hour=11;tm.minute=2;tm.second=11;
bpd=_stBPDynamicData();
bpd.gpsTime=bpd.longitude=1234567;bpd.latitude=246898;#...其它参数
data=gpsData();
data.strDeviceID=u'桂Coo007';data.stBPD=
#调用 API发送数据
api.SendUPRealLocation( data.strDeviceID, data.cDeviceColor ,
data.nMsgCode, addressof( data.stBPD ) );
注意SendUPRealLocation第三个参数是_stBPDynamicData * 指针类型,所以要用ctypes.addressof()取参数的地址。
四、回调函数
写到这里就忍不住唠叨几句,这个系统的协议设计的太有 &个性&了。这个系统的功能说起来也不复杂,就是要GPS运营商把指定的车辆位置信息发送到中心平台,同时中心平台可以向各GPS终端发送一些数据和指令,比如传送文字信息到终端,或者要求终端拍张照片反馈到中心。
这个协议流程是这样,运营商端主动连接到中心服务器,然后此连接只用于传输向中心平台主动发送的数据。登录成功了之后呢,中心平台再向运营商的IP建立一个连接,用于中心下发的数据和指令。官方称为&双链路&。
于是,就要求运营商必须要有固定的公网IP(这个不是问题,据了解GPS运营商服务器都有固定IP),而且这个程序必须运行在有公网IP的电脑上或采用端口映射之类的方法。可是俺开发设计时是在大教育局域网中的,搞个端口映射都不可能更别谈公网IP了。于是,在调试下行数据部分功能时就只能远程到运营商服务器上去调试了。
回归正题。
要使用回调函数,需要先用 CFUNCTYPE 定义回调函数的类型,官方API中有十多个回调函数注册,定义摘抄:
#define DCSPCLIENTDLL __declspec(dllexport)
typedef void (*pDownTextInfoFv) ( const char *const pDeviceID,
const char cDeviceColor, const char *const pInfo );
typedef void (*pDownCommunicateReqFv) ( const char *const pDeviceID,
const char cDeviceColor,
const char *const pCalledTel );
extern "C"
void DCSPCLIENTDLL RegDownTextInfoFunc( pDownTextInfoFv pFv );
void DCSPCLIENTDLL RegDownCommunicateReqFunc( pDownCommunicateReqFv pFv );
在python中,定义相应的类型和回调处理函数:
"""下发文字信息"""
def downTextInfo(pDeviceID,cDeviceColor,pInfo):
print(u'&-[下发文字]:{0},{1}'.format(str(pDeviceID),str(pInfo)) );
r=api.SendUpTextInfoAck(pDeviceID, cDeviceColor, True );
print(u'-&回复下发文字成功。');
print(u'-&回复下发文字失败。');
pDownTextInfoFv = CFUNCTYPE(c_void_p,c_char_p, c_char, c_char_p)
#回调函数类型定义
pDownTextInfoHandle = pDownTextInfoFv(downTextInfo);
api.RegDownTextInfoFunc(pDownTextInfoHandle);
#注册回调函数
其中SendUpCommunicateAck是回应中心,告知已经收到信息。二个参数类型和downTextInfo中的参数类型一到,所以可以不用初始化声明此函数的参数定义。
其余的回调函数用相同的方法处理。
调试完API对接部分功能后,在想用哪个py库操作数据库比较方便呢,找了一下之后才想到为何不用ironPython而可以直接使用ado.net访问数据库,岂不是更爽。
于是把代码搬到ironPython2.6中试试,让我十分惊喜的是不用做任何个性代码直接运行成功! 2.6中的ctypes和Python2.6的一样都是1.1.0版。
PS:借用 的主题和CSS。
出处:无常笔记python27.dll下载|python27.dll丢失(32/64位)下载_ 当易网
您的位置: →
→ python27.dll丢失(32/64位)
python27.dll丢失(32/64位)
python27.dll下载|
软件大小:1.1M
软件语言:英文
软件类型:国外软件
软件授权:免费软件
更新时间:
软件类别:.dll文件
软件官网:暂无
应用平台:WinXP, Win7, win2003, win8, win 10, win2012, vista, win2008
网友评分:4分
缺少python27.dll或者找不到python27.dll都是因为这个dll文件受到损坏导致,如果大家的电脑出现这个文件有问题的话,那么就可以在本站免费下载最新的dll文件进行替换,需要的朋友就来下载使用吧!python27.dll文件介绍:python27.dll是电脑中一个必不可缺的dll文件,许多的游戏或者软件运行都需要它的支持,如果没有这个文件可能会造成一些游戏或者软件运行不了。假如您的系统提示“丢失python27.dll”或者“python27.dll错误”那么你就可以用本站下载的dll文件进行修复了。python27.dll文件使用说明:1、解压下载的文件。2、复制文件“python27.dll”到系统目录下。3、系统目录一般为:C:\Windows\System32 64位系统为C:\Windows\SysWOW644、最后点击开始菜单--&运行--&输入python27.dll后,回车即可解决错误提示。DLL文件介绍:DLL(Dynamic Link Library)文件为动态链接库文件,又称“应用程序拓展”,是软件文件类型。在Windows中,许多应用程序并不是一个完整的可执行文件,它们被分割成一些相对独立的动态链接库,即DLL文件,放置于系统中。当我们执行某一个程序时,相应的DLL文件就会被调用。一个应用程序可使用多个DLL文件,一个DLL文件也可能被不同的应用程序使用,这样的DLL文件被称为共享DLL文件。
安装界面预览图
其它版本下载
python27.dll丢失(32/64位)
感谢您对当易网的信任,请把这份信任分享给您的朋友!
软件排行榜
123456789101112131415
123456789101112131415
21KB / 英文 /5.0分873KB / 简体中文 /5.0分2.1M / 英文 /5.0分99KB / 简体中文 /5.0分134KB / 英文 /5.0分215KB / 简体中文 /5.0分289KB / 英文 /5.0分169KB / 简体中文 /5.0分296KB / 英文 /5.0分
装机必备软件
当易网 版权所有 Copyright ©
. All rights reserved.大话西游2 python23.dll, 因此这个应用程序未能启动. 重新安装应用程序可能会修复此问题._百度知道
色情、暴力
我们会通过消息、邮箱等方式尽快将举报结果通知您。
大话西游2 python23.dll, 因此这个应用程序未能启动. 重新安装应用程序可能会修复此问题.
!!!.你们看怎么个想法呢?谢谢了有的人叫我装系统!!!!获取种子文件失败
网上下载吗??
我有更好的答案
...,所以你获取种子文件当然失败,但是如果你的不是电信的话.,想不到原因不用重装系统.那我就不知道了,不过也有可能是网络问题#76重装大话.,重装大话就好了啦现在如果是电信的话BT不能下了
采纳率:32%
上面说的就很好~!
为您推荐:
其他类似问题
您可能关注的内容
大话西游2的相关知识
等待您来回答&>&&>&&>&&&&python23.dll
python23.dll 官方版
软件大小:436.00KB
软件语言:简体中文
软件授权:免费版
软件类别:系统其它
软件等级:
更新时间:
官方网站:.cn
应用平台:WinAll
23.dll是python中的一个重要dll文件,缺少它可能会造成软件不能正常运行。当你的电脑弹出提示&缺少python23.dll&或者&没有找到python23.dll&等错误信息,请下载华军小编为你提供的dll文件,使用它可以帮助您解决上述问题。
python23.dll使用方法
1、解的文件。
2、复制文件&python23.dll&到系统目录下。
3、系统目录一般为:C:WINNTSystem32 64位系统为C:SysWOW64。
4、最后点击开始菜单--&运行--&输入svr32 python23.dll后,回车即可解决错误提示。
python23.dll更新日志
1.修复若干b;
2.优化细节问题;
小编推荐:python23.dll作为一款久经风霜的系统其它,已经在一次又一次的版本中进行了更新换代,给用户带来了极高的使用体验,强烈推荐需要的用户下载体验,另外还推荐、、、等相关使用。
python23.dll
python23.dll相关专题
如有问题,请加群联系小编!
群①: (已满);群②:
PC下载站网友:
PC下载站网友
python23.dll有没有最新版?
PC下载站网友
我觉得很不错呀,符合我的预期,那些不会用的人就别怪python23.dll了
PC下载站网友
python23.dll很好很棒棒哦
PC下载站网友
软件还不错,送你个好评
PC下载站网友
别人推荐的,试试看
PC下载站网友
用起来感觉不错分享!
PC下载站网友
这python23.dll整体还不错,比较简洁,资源下载没有那些垃圾东西,给你点赞。
PC下载站网友
我觉得很不错呀,那些不会用的人就别怪软件
PC下载站网友
找了好多家,可找到了。
PC下载站网友
还在研究python23.dll中,很多功能不会用~~
相关软件下载新手园地& & & 硬件问题Linux系统管理Linux网络问题Linux环境编程Linux桌面系统国产LinuxBSD& & & BSD文档中心AIX& & & 新手入门& & & AIX文档中心& & & 资源下载& & & Power高级应用& & & IBM存储AS400Solaris& & & Solaris文档中心HP-UX& & & HP文档中心SCO UNIX& & & SCO文档中心互操作专区IRIXTru64 UNIXMac OS X门户网站运维集群和高可用服务器应用监控和防护虚拟化技术架构设计行业应用和管理服务器及硬件技术& & & 服务器资源下载云计算& & & 云计算文档中心& & & 云计算业界& & & 云计算资源下载存储备份& & & 存储文档中心& & & 存储业界& & & 存储资源下载& & & Symantec技术交流区安全技术网络技术& & & 网络技术文档中心C/C++& & & GUI编程& & & Functional编程内核源码& & & 内核问题移动开发& & & 移动开发技术资料ShellPerlJava& & & Java文档中心PHP& & & php文档中心Python& & & Python文档中心RubyCPU与编译器嵌入式开发驱动开发Web开发VoIP开发技术MySQL& & & MySQL文档中心SybaseOraclePostgreSQLDB2Informix数据仓库与数据挖掘NoSQL技术IT业界新闻与评论IT职业生涯& & & 猎头招聘IT图书与评论& & & CU技术图书大系& & & Linux书友会二手交易下载共享Linux文档专区IT培训与认证& & & 培训交流& & & 认证培训清茶斋投资理财运动地带快乐数码摄影& & & 摄影器材& & & 摄影比赛专区IT爱车族旅游天下站务交流版主会议室博客SNS站务交流区CU活动专区& & & Power活动专区& & & 拍卖交流区频道交流区
白手起家, 积分 9, 距离下一级还需 191 积分
论坛徽章:0
------**求教各路大神!!!**------
Python调用用C++写的dll,这个dll有调用另一个dll,设为B.dll,这个B.dll中封装了
C#,结果在运行python时出现错误:
【OSError: [WinError -] Windows Error 0x%X】
python代码如下:import ctypes, os
from ctypes import *
CUR_PATH = os.path.dirname(__file__)
devGenDll = ctypes.WinDLL(os.path.join(CUR_PATH, &RF_MES.dll&))
devGenDll.InitWS(ctypes.c_char_p(b'www.xxxx.nett'))
deviceID = devGenDll.GetDeviceID(&11&, &7&)
print(deviceID)复制代码RF_MES.dll中主要代码如下:#include &stdafx.h&
#include &WSDataTransCpp.h&
#include &stdlib.h&
#include &stdio.h&
#define SUCCESS& & & & & & & & 1
extern &C&{
CWSDataTransCpp* wsDataT
__declspec(dllexport)&&void __stdcall InitWS(char* serverIP)
{
& & & & printf(&InitWS&);
& & & & wsDataTrans = new CWSDataTransCpp(serverIP);
& & & &
__declspec(dllexport)&&char* __stdcall GetDeviceID(char* lineNo, char* stationNo)
{
& & & & if(wsDataTrans && wsDataTrans-&ConnectCheck())
& & & & & & & & return wsDataTrans-&ObtainDeviceID(lineNo, stationNo);
& & & & //printf(&GetDeviceID&);
& & & & return NULL;
}
__declspec(dllexport)&&int __stdcall UploadResult(char* lineNo, char* stationNo, char* deviceID, char* result)
{
& & & & return SUCCESS;
}
}复制代码
白手起家, 积分 9, 距离下一级还需 191 积分
论坛徽章:0
在线等啊!!求赐教!
小富即安, 积分 4776, 距离下一级还需 224 积分
论坛徽章:4
(-)dec=(E0434352)hex,查Windows错误代码可以知道,这个应当是.NET的问题。
建议你先看下你的C++调用C#的结果是不是正常吧。
这个应当和python没有关系。
白手起家, 积分 9, 距离下一级还需 191 积分
论坛徽章:0
本帖最后由 wafer_lu 于
11:14 编辑
icymirror 发表于
回复 1# wafer_lu
(-)dec=(E0434352)hex,查Windows错误代码可以知道,这个应当是.NET的问题。
我用c写个应用调用这个dll没问题,在python上就有问题。
不知道是不是python调用封装C#的dll有什么特别的地方没?
小富即安, 积分 4776, 距离下一级还需 224 积分
论坛徽章:4
有个问题,刚刚发现,你是在用ctypes,这个是和native library交互的。
也就是说:使用这个,python调用c接口没有问题,但是.net的dll不是ctypes可以交互的library。这可能是问题所在。
你试下在python里面有没有可能直接调用你的c的库文件。应当是可以的。
(因为.NET的二进制是给.net的平台用的二进制格式,不是那种传统的c的cll,应当是这里的格式问题。)
小富即安, 积分 4776, 距离下一级还需 224 积分
论坛徽章:4
或者,你也可以通过使用IronPython来调用C#的Library(.dll)文件。
白手起家, 积分 9, 距离下一级还需 191 积分
论坛徽章:0
IronPython 直接调用C# 的dll?
但我的调用关系是这样的:python-&A.dll(c++)-&B.dll(C++)-&C.dll(C#)
B和C都是第三方的。A是我自己封装的。
运行python脚本时会提示无法加载组件C.dll。
白手起家, 积分 9, 距离下一级还需 191 积分
论坛徽章:0
问题终于解决了。。。
需要把C.dll放到python.exe的目录下(不是脚本目录)才能运行成功。
谢谢 @icymirror 的回复。
北京盛拓优讯信息技术有限公司. 版权所有 京ICP备号 北京市公安局海淀分局网监中心备案编号:22
广播电视节目制作经营许可证(京) 字第1234号
中国互联网协会会员&&联系我们:
感谢所有关心和支持过ChinaUnix的朋友们
转载本站内容请注明原作者名及出处

我要回帖

更多关于 没有找到xlue.dll 的文章

 

随机推荐