python调用动态库,如何传递纯虚结构体指针参数

过客 2017-09-14 07:59:55
第一次发求助帖,格式不熟,烦请各位答友见谅
最近在学python,想调用动态库的函数,函数其中一个参数是纯虚接口的指针,请答友指教如何调用,不胜感激

1、动态库函数

//导出接口函数
extern "C" int CreateCardReaderDevice(const char *pName,
ICardReaderDevice *&ppDevice)
{
//xsys_init();
ppDevice = new CNDTCardReader_OMRON();

return 0;
}

2、结构体


typedef struct _TRACK_INFO
{
char szTrack1[77];
char szTrack2[38];
char szTrack3[105];
bool bTrack1OK;
bool bTrack2OK;
bool bTrack3OK;
}TRACK_INFO;


struct ICardReaderDevice
{
virtual const char * GetVersion()
{
string version="2.2";
return version.c_str();
}
virtual void Release() = 0;
virtual int Init(int nFlag, int nNeedWobble = 3) = 0;
virtual int Open(const char *pMode) = 0;
virtual void Close()= 0;
virtual int EatCard() = 0;
virtual int EjectCard() = 0;
virtual int AcceptCard(ULONG ulTimeout, IWaitCancel *pWaitCancel,bool Magnetic=true) = 0;
virtual int WriteTracks(TRACK_INFO &stTrackInfo) = 0;
virtual int ReadTracks(TRACK_INFO &stTrackInfo) = 0;
......
};

3、子类


class CNDTCardReader_OMRON: public ICardReaderDevice
{
public:
int m_nCardStatus;
int m_nLastError;
bool m_bCardInGatePosition;
bool m_bReTakeIn;
int m_nEjectedCard;
int m_nTakeCard;

CNDTCardReader_OMRON(void);
virtual int Init(int nFlag, int nNeedWobble = 3);
virtual int EatCard();
virtual int EjectCard();
......
}

...全文
338 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
张强1990 2017-09-18
  • 打赏
  • 举报
回复
之前用ctypes调用过window api,给你做个参考
class WLAN_BSS_ENTRY(Structure):
    _fields_ = [
        ("dot11Ssid", DOT11_SSID),
        ("uPhyId", ULONG),
        ("dot11Bssid", DOT11_MAC_ADDRESS),
        ("dot11BssType", DOT11_BSS_TYPE),
        ("dot11BssPhyType", DOT11_PHY_TYPE),
        ("lRssi", LONG),
        ("uLinkQuality", ULONG),
        ("bInRegDomain", BOOLEAN),
        ("usBeaconPeriod", USHORT),
        ("ullTimestamp", c_ulonglong),
        ("ullHostTimestamp", c_ulonglong),
        ("usCapabilityInformation", USHORT),
        ("ulChCenterFrequency", ULONG),
        ("wlanRateSet", WLAN_RATE_SET),
        ("ulIeOffset", ULONG),
        ("ulIeSize", ULONG),
    ]
对应C结构
typedef struct _WLAN_BSS_ENTRY {
  DOT11_SSID        dot11Ssid;
  ULONG             uPhyId;
  DOT11_MAC_ADDRESS dot11Bssid;
  DOT11_BSS_TYPE    dot11BssType;
  DOT11_PHY_TYPE    dot11BssPhyType;
  LONG              lRssi;
  ULONG             uLinkQuality;
  BOOLEAN           bInRegDomain;
  USHORT            usBeaconPeriod;
  ULONGLONG         ullTimestamp;
  ULONGLONG         ullHostTimestamp;
  USHORT            usCapabilityInformation;
  ULONG             ulChCenterFrequency;
  WLAN_RATE_SET     wlanRateSet;
  ULONG             ulIeOffset;
  ULONG             ulIeSize;
} WLAN_BSS_ENTRY, *PWLAN_BSS_ENTRY;
过客 2017-09-18
  • 打赏
  • 举报
回复
等大神
过客 2017-09-15
  • 打赏
  • 举报
回复
求大神指点啊

37,741

社区成员

发帖
与我相关
我的任务
社区描述
JavaScript,VBScript,AngleScript,ActionScript,Shell,Perl,Ruby,Lua,Tcl,Scala,MaxScript 等脚本语言交流。
社区管理员
  • 脚本语言(Perl/Python)社区
  • WuKongSecurity@BOB
加入社区
  • 近7日
  • 近30日
  • 至今

试试用AI创作助手写篇文章吧