python调用so 如何传递结构体参数(纯虚接口)?

第一次发求助帖,格式不太规范,烦请各位答友见谅

本人想python调用动态库的一个接口,接口其中一个参数是接口类的指针,不知如何调用,请大牛指教,不胜感激

1、so接口函数

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

    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();
            ......
}

1个回答

Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
其他相关推荐
python 调用C++函数,关于结构体传参问题

python 调用C++函数,C++函数的参数类型是pyobject*,其实是一个结构体数组 类似于 #define NUM 32 stuct A { int a; int b; }; struct B { int len; A ab[NUM]; } 请问在python中如何将这个结构体数组表示出来并传给 C++函数。 我在python中用类表示的 class A: def __init__(self): self.a=0 self.b=0 class B: def __init__(self): self.len =0 self.ab=[] 但是提示 new style getargs format but argument is not a tuple 第一个问题是我用类表示结构体对不对, 第二个问题我该怎样做。 python新手,跪求请教

c与python互相调用传递参数

C调用Python怎么向python里传递结构体,怎么将一个python模块添加到python的一个函数里面,

python3 ctypes 的 结构体定义中,怎么引用自身?

我这么使用时提示说“找不到Sentence_link” ``` class Sentence_link(ctypes.Structure): _fields_= [("para_idx", ctypes.c_ulong), ("sent_idx", ctypes.c_ulong),("sent_init",ctypes.c_int),("msg_buff",ctypes.c_char_p), ("next",ctypes.POINTER(Sentence_link))] ``` ``` _fields_= [("para_idx", ctypes.c_ulong), ("sent_idx", ctypes.c_ulong),("sent_init",ctypes.c_int),("msg_buff",ctypes.c_char_p), ("next",ctypes.POINTER(Sentence_link))] NameError: name 'Sentence_link' is not defined ``` 请问该如何引用自身?

C++通过jni向java层传递自定义结构体参数

自定义结构体在java中定义为相应的类,存储数据变量 C++的回调函数的注册函数为: ``` void CCtest::registerInit(void (*pFunc)(PARAMETER*)){ xxxxxxxx ... } ``` 现有若干问题不解。 1.该函数的函数签名的变量类型该如何进行书写? 是直接将参数看作是void类型? ``` {"registerInit","()V",(void*)native_registerInit}; ? ``` 2.假设上述问题解决。 在jni层通过定义 ``` static jmethodID registerInit_callback_method_ID; typedef void (* registerInit_Cb_t)(PARAMETER* myPara); ``` 在native_registerInit函数中直接调用 ``` CCtest::registerInit(registerInit_Cb_t); ``` registerInit_Cb_t指向具体的实现函数nativeregisterInit_Cb; 在函数void nativeregisterInit_Cb(PARAMETER*)中,通过 ``` env->CallVoidMethod(xxxobject,xxxmethodID,/*xxx结构体的参数如何表示成类类型?(jobject?)*/); ``` 调用java层中的回调函数。

C#调用C++DLL结构体指针传参问题,求大神现身指导,在线等!!!

c++方法: ``` extern "C" _declspec(dllexport) bool GetKE(string CaseId, string CaseText, string &CaseReason, SS *KeList,int &nLen_KeList); ``` c++结构体: ``` typedef struct BriefKE { string KeName; string KeValue; }SS; ``` C#结构体: ``` [StructLayout(LayoutKind.Sequential,CharSet=CharSet.Ansi,Pack=1)] public struct BriefKE { [MarshalAs(UnmanagedType.ByValTStr, SizeConst = 256)] public string KeName; [MarshalAs(UnmanagedType.ByValTStr, SizeConst = 256)] public string KeValue; } ``` C#函数: ``` [DllImport("KnowledgeExtract.dll", EntryPoint = "GetKE")] [return: MarshalAs(UnmanagedType.Bool)] public unsafe static extern bool GetKE(StringBuilder CaseId, StringBuilder CaseText, ref StringBuilder CaseReason, BriefKE[] infos, ref int nLen_KeList); ``` C#调用: ``` //结构体数组指针初始化 SS[] KeList = new SS[20]; for (int i = 0; i < KeList.Length; i++) { KeList[i] = new SS(); } IntPtr[] ptArray = new IntPtr[1]; ptArray[0] = Marshal.AllocHGlobal(Marshal.SizeOf(typeof(SS)) * 20); IntPtr pt = Marshal.AllocHGlobal(Marshal.SizeOf(typeof(SS))); Marshal.Copy(ptArray, 0, pt, 1); //其他几个参数初始化省略 if (!test.GetKE(caseId, caseText, ref caseReason, infos, ref len)) { Console.WriteLine("读取失败"); Console.ReadLine(); } ``` 总是报下面这个错,请大神给写一个C#调用的例子 ``` “System.AccessViolationException”类型的未经处理的异常在 未知模块。 中发生 其他信息: 尝试读取或写入受保护的内存。这通常指示其他内存已损坏。 ```

python 调用dll如何返回多个值

import scipy.io as scio import os import ctypes import datetime import numpy as np #读取dll文件 #这里的地址目录是HessianFilter.dll所在的文件夹 start = datetime.datetime.now() cur_path = os.path.dirname(r'C:\Users\Administrator\Desktop\code_and_data\code\HessianFilter\\') dll_path = os.path.join(cur_path,'HessianFilter.dll') print dll_path dll = ctypes.windll.LoadLibrary(dll_path) #读取mat文件,Mat文件所在的文件夹中读取 matPath = r'C:\Users\Administrator\Desktop\code_and_data\data\Nodule19664.mat' imgData = scio.loadmat(matPath) #从mat文件中我们取到了整个三维数组 imgDataArray = imgData['imagetest1'] #得到数组文件的参数:宽,高,层数 widthSrc,heightSrc,sliceNumSrc = imgDataArray.shape #声明一个三维的c_float类型的数组,用于存放mat数据,并将数据转化为c_float imgDataArray_p = (((ctypes.c_float*sliceNumSrc)*heightSrc)*widthSrc)() for i in range(widthSrc): for j in range(heightSrc): for k in range(sliceNumSrc): imgDataArray_p[i][j][k] = ctypes.c_float(imgDataArray[i][j][k]) imgDataP = ctypes.POINTER(ctypes.c_float)(imgDataArray_p) print '---------->' #需要再声明两个返回值 HessianDot = (ctypes.c_float*(widthSrc*heightSrc*sliceNumSrc))() HessianLine = (ctypes.c_float*(widthSrc*heightSrc*sliceNumSrc))() HessianDot_p = ctypes.POINTER(ctypes.c_float)(HessianDot) HessianLine_p = ctypes.POINTER(ctypes.c_float)(HessianLine) #定义一个常数 sigma = ctypes.c_float(8) #定义一个三维数组 imgSize = [widthSrc,heightSrc,sliceNumSrc] imageSize = (ctypes.c_float*len(imgSize))(*imgSize) #定义一个指向三维数组的指针 imageSizeP = ctypes.POINTER(ctypes.c_float)(imageSize) #这个就是调用dll中的函数了 dll.RunHessianMultiThread(ctypes.byref(imgDataArray_p),sigma,ctypes.byref(imageSizeP),ctypes.byref(HessianDot_p),ctypes.byref(HessianLine_p),4) print '--调用后-点数据--' print HessianDot_p print HessianDot_p[0:24] #print HessianDot_p.contents print '--调用后-线数据--' print HessianLine_p print HessianLine_p[0:24] #print HessianLine_p.contents print '<---------Over------------->\n\n' print datetime.datetime.now()-start

c# 调用c++ sdk 传结构体指针

本人菜鸟一枚 SDK函数 LIBBVCU_API BVCU_Result BVCU_Initialize( const BVCU_GlobalParam* pParam); 其中 BVCU_GlobalParam为结构体 typedef struct _BVCU_GlobalParam { int iSize; void (*OnEvent)(int iEventCode, void* pParam); int iReserved[4]; }BVCU_GlobalParam; 问题我是该直接传递一个指针,还是传一个BVCU_GlobalParam类型参数 public IntPtr m_bvcuSdkHandle; BVCU_Initialize(ref Im_bvcuSdkHandle)(指针) 还是 BVCU_Initialize(ref _BVCU_GlobalParam bg) (结构体) [DllImport("libBVCU.dll", CallingConvention = CallingConvention.Cdecl)] public static extern int BVCU_Initialize(ref IntPtr handle); [StructLayout(LayoutKind.Sequential)] public struct BVCU_GlobalParam { public int iSize; public CallbackDelegate OnEvent; [MarshalAs(UnmanagedType.ByValArray, SizeConst = 4)] public int[] iReserved; }; 这两种都试了,接口返回还是参数不符合,请大神上码指教

c语言pthread_create传入结构体参数,在线程中拿到的参数无效?

如题,我在做ndk 开发时,往pthread_create()的第四个参数,传入一个结构体指针, 在线程中拿到的结构体里的成员是过期的,这是为什么呢、好心的大侠来解答下。

webservice 带结构体参数的函数调用

各位大神,小弟刚接触websevice 我在webservice中写了一个带结构体参数的函数。 再在客户端定义了一个结构体,并以此结构体作为参数,调用webservice中的函数。 。程序报错![图片说明](https://img-ask.csdn.net/upload/201601/05/1451958926_863018.png) 但当传入其他类型的参数是没有问题的。

pthread_create传结构体参数问题

问题:最后输出的x,y,z不是传入的1,2,3 ,问题出在哪里? 代码如下: typedef __iconflash { int x; int y; int z; } iconflash; -------------------------------------------------------- pthread__t thread; iconflash if; if.x = 1; if.y = 2; if.z = 3; pthread(&thread,NULL,flashmethod,&if); ---------------------------------------------- void flashmethod(void *data) { iconflash *if = (iconflash *)data; printf("ifx=%d,ify=%d,ifz=%d\n",if->x,if->y,if->z); }

C# 调用c++函数 结构体 指针

求大神解答下, c++结构体: typedef struct { Byte byIndex; Byte byRW; }PACKET; typedef struct { PACKET *pPackets; INT32 iNumPackets; }BLOCK c++ 函数申明: BOOL Transfer(BLOCK block); C#如何调用这个Transfer函数: 1:定义C#结构体 public struct PACKET { byte byIndex; byte byRW; } 那么另个结构体BLOCK在C#中怎么定义??? 2. 定义完后如何调用(DllImport这个我知道),其他有什么特殊设置????

java用jna调用c动态库结构体问题

接口是这样的:![图片说明](https://img-ask.csdn.net/upload/201701/19/1484799672_908921.png)设备句柄已经没问题。结构体是这样:![图片说明](https://img-ask.csdn.net/upload/201701/19/1484799762_467194.png) 我模拟的结构体:![图片说明](https://img-ask.csdn.net/upload/201701/19/1484799601_546730.png)但是new了之后传入一直返回传入指针为null的错误代码,请问这结构体应该怎么搞?

关于python调用C#库的问题

 大家好,我需要用python来调用C#的.dll,一直在研究http://blog.csdn.net/xugangjava/article/details/7202356这篇文章,现在碰到了一个问题,请大家帮忙出出主意,谢谢。  首先是这篇文章中的最末尾,命令行中有一条“d.EncryptMd5('dsaf')”(如图1)。请问这个"d."是从何而来?之前也没有看到任何类例化成了"d"? 图1: ![图片说明](https://img-ask.csdn.net/upload/201604/13/1460562589_893201.png)  其次是我在调用由C# COM生成的.py文件中的方法时,出现了“CoClassBaseClass”类能正常例化,而“DispatchBaseClass”无法正常例化的情况(如图2和图3),请问这是为什么?如何才是正确的调用方法? 图2: ![图片说明](https://img-ask.csdn.net/upload/201604/13/1460562611_990146.png) 图3: ![图片说明](https://img-ask.csdn.net/upload/201604/13/1460562630_687172.png) 以下是用makepy转化C# COM生成的.py: ``` #python# # -*- coding: mbcs -*- # Created by makepy.py version 0.5.01 # By python version 2.7.4 (default, Apr 6 2013, 19:54:46) [MSC v.1500 32 bit (Intel)] # From type library 'testCom.tlb' # On Wed Apr 13 16:58:28 2016 '' makepy_version = '0.5.01' python_version = 0x20704f0 import win32com.client.CLSIDToClass, pythoncom, pywintypes import win32com.client.util from pywintypes import IID from win32com.client import Dispatch # The following 3 lines may need tweaking for the particular server # Candidates are pythoncom.Missing, .Empty and .ArgNotFound defaultNamedOptArg=pythoncom.Empty defaultNamedNotOptArg=pythoncom.Empty defaultUnnamedArg=pythoncom.Empty CLSID = IID('{95A0DC02-9D6B-4A40-A78A-C65357E749F5}') MajorVersion = 1 MinorVersion = 0 LibraryFlags = 8 LCID = 0x0 from win32com.client import DispatchBaseClass class IMyClass(DispatchBaseClass): CLSID = IID('{88DB152F-BC26-43C9-BED0-B6CDE14D85CF}') coclass_clsid = None def Add(self, x=defaultNamedNotOptArg, y=defaultNamedNotOptArg): return self._oleobj_.InvokeTypes(1610743808, LCID, 1, (3, 0), ((3, 1), (3, 1)),x , y) _prop_map_get_ = { } _prop_map_put_ = { } def __iter__(self): "Return a Python iterator for this object" try: ob = self._oleobj_.InvokeTypes(-4,LCID,3,(13, 10),()) except pythoncom.error: raise TypeError("This object does not support enumeration") return win32com.client.util.Iterator(ob, None) class _ComTest(DispatchBaseClass): CLSID = IID('{8069ED53-4C67-3611-BB38-AB9721C851EB}') coclass_clsid = IID('{20CEDF1F-BB34-4D68-B657-3884B6E84C4C}') _prop_map_get_ = { } _prop_map_put_ = { } def __iter__(self): "Return a Python iterator for this object" try: ob = self._oleobj_.InvokeTypes(-4,LCID,3,(13, 10),()) except pythoncom.error: raise TypeError("This object does not support enumeration") return win32com.client.util.Iterator(ob, None) class _Object(DispatchBaseClass): CLSID = IID('{65074F7F-63C0-304E-AF0A-D51741CB4A8D}') coclass_clsid = IID('{20CEDF1F-BB34-4D68-B657-3884B6E84C4C}') def Equals(self, obj=defaultNamedNotOptArg): return self._oleobj_.InvokeTypes(1610743809, LCID, 1, (11, 0), ((12, 1),),obj ) def GetHashCode(self): return self._oleobj_.InvokeTypes(1610743810, LCID, 1, (3, 0), (),) # Result is of type _Type def GetType(self): ret = self._oleobj_.InvokeTypes(1610743811, LCID, 1, (13, 0), (),) if ret is not None: # See if this IUnknown is really an IDispatch try: ret = ret.QueryInterface(pythoncom.IID_IDispatch) except pythoncom.error: return ret ret = Dispatch(ret, u'GetType', '{BCA8B44D-AAD6-3A86-8AB7-03349F4F2DA2}') return ret _prop_map_get_ = { "ToString": (0, 2, (8, 0), (), "ToString", None), } _prop_map_put_ = { } # Default property for this class is 'ToString' def __call__(self): return self._ApplyTypes_(*(0, 2, (8, 0), (), "ToString", None)) def __unicode__(self, *args): try: return unicode(self.__call__(*args)) except pythoncom.com_error: return repr(self) def __str__(self, *args): return str(self.__unicode__(*args)) def __int__(self, *args): return int(self.__call__(*args)) def __iter__(self): "Return a Python iterator for this object" try: ob = self._oleobj_.InvokeTypes(-4,LCID,3,(13, 10),()) except pythoncom.error: raise TypeError("This object does not support enumeration") return win32com.client.util.Iterator(ob, None) from win32com.client import CoClassBaseClass # This CoClass is known by the name 'testCom.ComTest' class ComTest(CoClassBaseClass): # A CoClass CLSID = IID('{20CEDF1F-BB34-4D68-B657-3884B6E84C4C}') coclass_sources = [ ] coclass_interfaces = [ _ComTest, _Object, ] default_interface = _ComTest IMyClass_vtables_dispatch_ = 1 IMyClass_vtables_ = [ (( u'Add' , u'x' , u'y' , u'pRetVal' , ), 1610743808, (1610743808, (), [ (3, 1, None, None) , (3, 1, None, None) , (16387, 10, None, None) , ], 1 , 1 , 4 , 0 , 28 , (3, 0, None, None) , 0 , )), ] _ComTest_vtables_dispatch_ = 1 _ComTest_vtables_ = [ ] _Object_vtables_dispatch_ = 1 _Object_vtables_ = [ (( u'ToString' , u'pRetVal' , ), 0, (0, (), [ (16392, 10, None, None) , ], 1 , 2 , 4 , 0 , 28 , (3, 0, None, None) , 0 , )), (( u'Equals' , u'obj' , u'pRetVal' , ), 1610743809, (1610743809, (), [ (12, 1, None, None) , (16395, 10, None, None) , ], 1 , 1 , 4 , 0 , 32 , (3, 0, None, None) , 0 , )), (( u'GetHashCode' , u'pRetVal' , ), 1610743810, (1610743810, (), [ (16387, 10, None, None) , ], 1 , 1 , 4 , 0 , 36 , (3, 0, None, None) , 0 , )), (( u'GetType' , u'pRetVal' , ), 1610743811, (1610743811, (), [ (16397, 10, None, "IID('{BCA8B44D-AAD6-3A86-8AB7-03349F4F2DA2}')") , ], 1 , 1 , 4 , 0 , 40 , (3, 0, None, None) , 0 , )), ] RecordMap = { } CLSIDToClassMap = { '{20CEDF1F-BB34-4D68-B657-3884B6E84C4C}' : ComTest, '{88DB152F-BC26-43C9-BED0-B6CDE14D85CF}' : IMyClass, '{8069ED53-4C67-3611-BB38-AB9721C851EB}' : _ComTest, '{65074F7F-63C0-304E-AF0A-D51741CB4A8D}' : _Object, } CLSIDToPackageMap = {} win32com.client.CLSIDToClass.RegisterCLSIDsFromDict( CLSIDToClassMap ) VTablesToPackageMap = {} VTablesToClassMap = { '{88DB152F-BC26-43C9-BED0-B6CDE14D85CF}' : 'IMyClass', '{8069ED53-4C67-3611-BB38-AB9721C851EB}' : '_ComTest', '{65074F7F-63C0-304E-AF0A-D51741CB4A8D}' : '_Object', } NamesToIIDMap = { 'IMyClass' : '{88DB152F-BC26-43C9-BED0-B6CDE14D85CF}', '_ComTest' : '{8069ED53-4C67-3611-BB38-AB9721C851EB}', '_Object' : '{65074F7F-63C0-304E-AF0A-D51741CB4A8D}', } ```

最近用JNA技术,实现java调用C++的DLL,如何用java模拟c++的链表结构体。

C++结构体 struct CUser_DataStruct { char pKKSCoding[128]; //标签点Kks编码 DWORD time; //UTC时间 WORD millisecond; //毫秒 int nDataState; //数据状态 double dValue; //数值 CUser_DataStruct* pNext; //指向下一个数据节点的指针 }; C++的入口函数说明 Bool DataUp (CUser_DataStruct FPointArray[], int DataNumber,bool bCover); 参数:CUser_DataStruct FPointArray[]:输入参数,用户上传数据的结构体 int DataNumber:输入参数,数组的大小 bool bCover:输入参数,数据上传标识位,当为 true 时,表示上传数据可以覆盖 原有数据;当为 false 时,表示上传数据不可以覆盖原有数据 功能:数据上传接口 返回值:成功 true,失败 false 我的java模拟类 public class UserData extends Structure { public byte[] pKKSCoding =new byte[128]; public int nDataState; public Double DValue; public int time; public short millisecond; public UserData.ByReference PUserDataStruct; public static class ByReference extends UserData implements Structure.ByReference{} public static class ByValue extends UserData implements Structure.ByValue{} @Override protected List getFieldOrder() { // TODO Auto-generated method stub return Arrays.asList(new String[]{"pKKSCoding","nDataState","DValue","time","millisecond","PUserDataStruct"}); } 代码实现部分 int nCount=2; String TagName="NY001\0"; UserData.ByReference[] UserDataStruct= new UserData.ByReference[nCount]; for (int i=0;i<nCount;i++){ UserDataStruct[i]=new UserData.ByReference(); UserDataStruct[i].pKKSCoding=TagName.getBytes(); //取当前UTC String lCurrentTime=String.valueOf(System.currentTimeMillis()); //截取到秒级 UserDataStruct[i].time=Integer.parseInt(lCurrentTime.substring(0, lCurrentTime.length()-3)); //截取后三位毫秒数 UserDataStruct[i].millisecond=Short.parseShort(lCurrentTime.substring(lCurrentTime.length()-3,lCurrentTime.length())); UserDataStruct[i].nDataState=1; UserDataStruct[i].DValue=(double) 456+i; //链表指针 UserDataStruct[i].PUserDataStruct=new UserData.ByReference(); UserDataStruct[i].write(); } result=Clientdll.Instanse.DataUp(UserDataStruct, nCount, true); 请各位大神帮忙指点指点

android jni传递结构体类型给c函数,返回结构体,怎么写啊

android jni传递结构体类型给c函数,返回结构体,怎么写啊 c方法:OutAnalyseResultPacket* EcgMainPro(InEcgPacket* pPacKet) 参数和返回值都是结构体类型

怎么在一个结构体里调用本身结构体数组

typedef struct XML_DATA { struct XML_DATA DATA[10]; char MENU[10][256]; ezxml_t xml; char *txt; char *strAttr; char *file; }; XML_DATA m_data[10]; 这样使用为什么会报错,应该怎么修改? 谢谢大家帮忙看看咯。

高分悬赏,Java语言如何调用C语言写的dll,并且传递结构体指针

高分悬赏,Java语言如何调用C语言写的dll,并且传递结构体指针 高分悬赏,Java语言如何调用C语言写的dll,并且传递结构体指针

一个c++的方法结构体,c#调用传入结构体导出一直不对,求各位大神帮忙

struct HL7SDK_INTERFACE { void (* OnConnect) (int iBedNO); void (* OnDisconnect)(int iBedNO); void (* OnRecvHL7Msg)(int iBedNO, void * pMsg, int iLen, int iMsgType); void (* OnSendHL7Msg)(int iBedNO, void *pMsg, int iLen, int iMsgType); }; typedef struct HL7SDK_INTERFACE HL7SDK_INTERFACE, *PHL7SDK_INTERFACE; int InitHL7SDK(PHL7SDK_INTERFACE pHL7SDKInterace, enum HL7_WORK_MODE enHL7ServerMode, unsigned long ulServerIP, unsigned long ulLocalIP); 一个c++的方法结构体,c#调用传入结构体导出一直不对,求各位大神帮忙 [DllImport("HL7SDK.dll", EntryPoint = "InitHL7SDK", CallingConvention = CallingConvention.Cdecl)] public extern static int InitHL7SDK(ref SDKStruct pHL7SDKInterace, publicStruct.HL7_WORK_MODE serverMode, System.UInt32 serverIP, System.UInt32 localIP);

C#调用C++ Dll 返回信息与C++返回结构体中信息不一致?

各位大佬,小弟遇到一个很难理解的问题,情况如下: C++ 开发的Dll和硬件通讯,在C++中使用返回正常的数值,而在C#中通过DllImport方式调用,发现返回的数值不一致,具体代码如下: ** C++ 提供的结构体:** ``` typedef struct _SXPSERVER { BYTE bNodeaddr[6]; DWORD dwIp; char szMachineType[16]; char szHostName[16]; } SXPSERVER, *LPSXPSERVER; ``` ![图片说明](https://img-ask.csdn.net/upload/202003/09/1583717423_841994.png) **C# 自己写的DllImport 的结构体** ``` [StructLayout(LayoutKind.Sequential, CharSet = CharSet.Ansi)] public struct SXPSERVER { public uint dwIp; [MarshalAs(UnmanagedType.ByValArray, SizeConst = 6, ArraySubType = UnmanagedType.I1)] public byte[] bNodeaddr; [MarshalAs(UnmanagedType.ByValTStr, SizeConst = 16)] public string szMachineType; [MarshalAs(UnmanagedType.ByValTStr, SizeConst = 16)] public string szHostName; } ``` ![图片说明](https://img-ask.csdn.net/upload/202003/09/1583717435_345718.png) 调用全部都一切正常,结构体中也能够返回值,现在就是这个DWORD dwIp; 转换到C#中的 public uint dwIp;返回不一样,其他的都没有问题,请问各位大佬,我这个转换不对吗?查了半天看到的对应转换关系都是DWORD -》uint,我改成了int同样也是不对,这个咋整,这个值还会是后面的函数中的关键参数,卡到这里进行不下去了。 PS:看到有大神留言说这个参数位置写反了,我最开始的时候就是按照这个顺序( ``` [StructLayout(LayoutKind.Sequential, CharSet = CharSet.Ansi)] public struct SXPSERVER { [MarshalAs(UnmanagedType.ByValArray, SizeConst = 6, ArraySubType = UnmanagedType.I1)] public byte[] bNodeaddr; public uint dwIp; [MarshalAs(UnmanagedType.ByValTStr, SizeConst = 16)] public string szMachineType; [MarshalAs(UnmanagedType.ByValTStr, SizeConst = 16)] public string szHostName; } ``` )来的,出来的结果和这个是一样的 **问题已经解决了,解决的方式是这样的:** 我在C++的结构体与C#定义的结构体的顺序是不一样的,但这个不是主要的原因。而是我调用方式有问题。我把c#实现的这个结构体单独放到了一个DLL中,然后再通过别的工程去调用这个DLL,这样的话。不管结构体中的顺序是什么,它都能够调用成功,但是他成功之后,里面的数值是不对的,这个是我通过反编译看到的,所有的结构体变量约束都没有了,所以这个值肯定不对啦。而我把这个调用C++的这个结构体直接放到了我现在用的工程当中,按照错误的顺序,这个方法都不会调用成功,而按照正确的顺序后就ok啦!

初级玩转Linux+Ubuntu(嵌入式开发基础课程)

课程主要面向嵌入式Linux初学者、工程师、学生 主要从一下几方面进行讲解: 1.linux学习路线、基本命令、高级命令 2.shell、vi及vim入门讲解 3.软件安装下载、NFS、Samba、FTP等服务器配置及使用

我以为我对Mysql事务很熟,直到我遇到了阿里面试官

太惨了,面试又被吊打

Python代码实现飞机大战

文章目录经典飞机大战一.游戏设定二.我方飞机三.敌方飞机四.发射子弹五.发放补给包六.主模块 经典飞机大战 源代码以及素材资料(图片,音频)可从下面的github中下载: 飞机大战源代码以及素材资料github项目地址链接 ————————————————————————————————————————————————————————— 不知道大家有没有打过飞机,喜不喜欢打飞机。当我第一次接触这个东西的时候,我的内心是被震撼到的。第一次接触打飞机的时候作者本人是身心愉悦的,因为周边的朋友都在打飞机, 每

Python数据分析与挖掘

92讲视频课+16大项目实战+源码+¥800元课程礼包+讲师社群1V1答疑+社群闭门分享会=99元 &nbsp; 为什么学习数据分析? &nbsp; &nbsp; &nbsp; 人工智能、大数据时代有什么技能是可以运用在各种行业的?数据分析就是。 &nbsp; &nbsp; &nbsp; 从海量数据中获得别人看不见的信息,创业者可以通过数据分析来优化产品,营销人员可以通过数据分析改进营销策略,产品经理可以通过数据分析洞察用户习惯,金融从业者可以通过数据分析规避投资风险,程序员可以通过数据分析进一步挖掘出数据价值,它和编程一样,本质上也是一个工具,通过数据来对现实事物进行分析和识别的能力。不管你从事什么行业,掌握了数据分析能力,往往在其岗位上更有竞争力。 &nbsp;&nbsp; 本课程共包含五大模块: 一、先导篇: 通过分析数据分析师的一天,让学员了解全面了解成为一个数据分析师的所有必修功法,对数据分析师不在迷惑。 &nbsp; 二、基础篇: 围绕Python基础语法介绍、数据预处理、数据可视化以及数据分析与挖掘......这些核心技能模块展开,帮助你快速而全面的掌握和了解成为一个数据分析师的所有必修功法。 &nbsp; 三、数据采集篇: 通过网络爬虫实战解决数据分析的必经之路:数据从何来的问题,讲解常见的爬虫套路并利用三大实战帮助学员扎实数据采集能力,避免没有数据可分析的尴尬。 &nbsp; 四、分析工具篇: 讲解数据分析避不开的科学计算库Numpy、数据分析工具Pandas及常见可视化工具Matplotlib。 &nbsp; 五、算法篇: 算法是数据分析的精华,课程精选10大算法,包括分类、聚类、预测3大类型,每个算法都从原理和案例两个角度学习,让你不仅能用起来,了解原理,还能知道为什么这么做。

如何在虚拟机VM上使用串口

在系统内核开发中,经常会用到串口调试,利用VMware的Virtual Machine更是为调试系统内核如虎添翼。那么怎么搭建串口调试环境呢?因为最近工作涉及到这方面,利用强大的google搜索和自己

程序员的兼职技能课

获取讲师答疑方式: 在付费视频第一节(触摸命令_ALL)片头有二维码及加群流程介绍 限时福利 原价99元,今日仅需39元!购课添加小助手(微信号:csdn590)按提示还可领取价值800元的编程大礼包! 讲师介绍: 苏奕嘉&nbsp;前阿里UC项目工程师 脚本开发平台官方认证满级(六级)开发者。 我将如何教会你通过【定制脚本】赚到你人生的第一桶金? 零基础程序定制脚本开发课程,是完全针对零脚本开发经验的小白而设计,课程内容共分为3大阶段: ①前期将带你掌握Q开发语言和界面交互开发能力; ②中期通过实战来制作有具体需求的定制脚本; ③后期将解锁脚本的更高阶玩法,打通任督二脉; ④应用定制脚本合法赚取额外收入的完整经验分享,带你通过程序定制脚本开发这项副业,赚取到你的第一桶金!

MFC一站式终极全套课程包

该套餐共包含从C小白到C++到MFC的全部课程,整套学下来绝对成为一名C++大牛!!!

C++语言基础视频教程

C++语言基础视频培训课程:本课与主讲者在大学开出的程序设计课程直接对接,准确把握知识点,注重教学视频与实践体系的结合,帮助初学者有效学习。本教程详细介绍C++语言中的封装、数据隐藏、继承、多态的实现等入门知识;主要包括类的声明、对象定义、构造函数和析构函数、运算符重载、继承和派生、多态性实现等。 课程需要有C语言程序设计的基础(可以利用本人开出的《C语言与程序设计》系列课学习)。学习者能够通过实践的方式,学会利用C++语言解决问题,具备进一步学习利用C++开发应用程序的基础。

北京师范大学信息科学与技术学院笔试10复试真题

北京师范大学信息科学与技术学院笔试,可以更好的让你了解北师大该学院的复试内容,获得更好的成绩。

深度学习原理+项目实战+算法详解+主流框架(套餐)

深度学习系列课程从深度学习基础知识点开始讲解一步步进入神经网络的世界再到卷积和递归神经网络,详解各大经典网络架构。实战部分选择当下最火爆深度学习框架PyTorch与Tensorflow/Keras,全程实战演示框架核心使用与建模方法。项目实战部分选择计算机视觉与自然语言处理领域经典项目,从零开始详解算法原理,debug模式逐行代码解读。适合准备就业和转行的同学们加入学习! 建议按照下列课程顺序来进行学习 (1)掌握深度学习必备经典网络架构 (2)深度框架实战方法 (3)计算机视觉与自然语言处理项目实战。(按照课程排列顺序即可)

网络工程师小白入门--【思科CCNA、华为HCNA等网络工程师认证】

本课程适合CCNA或HCNA网络小白同志,高手请绕道,可以直接学习进价课程。通过本预科课程的学习,为学习网络工程师、思科CCNA、华为HCNA这些认证打下坚实的基础! 重要!思科认证2020年2月24日起,已启用新版认证和考试,包括题库都会更新,由于疫情原因,请关注官网和本地考点信息。题库网络上很容易下载到。

Python界面版学生管理系统

前不久上传了一个控制台版本的学生管理系统,这个是Python界面版学生管理系统,这个是使用pycharm开发的一个有界面的学生管理系统,基本的增删改查,里面又演示视频和完整代码,有需要的伙伴可以自行下

软件测试2小时入门

本课程内容系统、全面、简洁、通俗易懂,通过2个多小时的介绍,让大家对软件测试有个系统的理解和认识,具备基本的软件测试理论基础。 主要内容分为5个部分: 1 软件测试概述,了解测试是什么、测试的对象、原则、流程、方法、模型;&nbsp; 2.常用的黑盒测试用例设计方法及示例演示;&nbsp; 3 常用白盒测试用例设计方法及示例演示;&nbsp; 4.自动化测试优缺点、使用范围及示例‘;&nbsp; 5.测试经验谈。

Tomcat服务器下载、安装、配置环境变量教程(超详细)

未经我的允许,请不要转载我的文章,在此郑重声明!!! 请先配置安装好Java的环境,若没有安装,请参照我博客上的步骤进行安装! 安装Java环境教程https://blog.csdn.net/qq_40881680/article/details/83585542 Tomcat部署Web项目(一)·内嵌https://blog.csdn.net/qq_40881680/article/d...

2019数学建模A题高压油管的压力控制 省一论文即代码

2019数学建模A题高压油管的压力控制省一完整论文即详细C++和Matlab代码,希望对同学们有所帮助

图书管理系统(Java + Mysql)我的第一个完全自己做的实训项目

图书管理系统 Java + MySQL 完整实训代码,MVC三层架构组织,包含所有用到的图片资源以及数据库文件,大三上学期实训,注释很详细,按照阿里巴巴Java编程规范编写

linux下利用/proc进行进程树的打印

在linux下利用c语言实现的进程树的打印,主要通过/proc下的目录中的进程文件,获取status中的进程信息内容,然后利用递归实现进程树的打印

微信小程序开发实战之番茄时钟开发

微信小程序番茄时钟视频教程,本课程将带着各位学员开发一个小程序初级实战类项目,针对只看过官方文档而又无从下手的开发者来说,可以作为一个较好的练手项目,对于有小程序开发经验的开发者而言,可以更好加深对小程序各类组件和API 的理解,为更深层次高难度的项目做铺垫。

[已解决]踩过的坑之mysql连接报“Communications link failure”错误

目录 前言 第一种方法: 第二种方法 第三种方法(适用于项目和数据库在同一台服务器) 第四种方法 第五种方法(项目和数据库不在同一台服务器) 总结 前言 先给大家简述一下我的坑吧,(我用的是mysql,至于oracle有没有这样的问题,有心的小伙伴们可以测试一下哈), 在自己做个javaweb测试项目的时候,因为买的是云服务器,所以数据库连接的是用ip地址,用IDE开发好...

人工智能-计算机视觉实战之路(必备算法+深度学习+项目实战)

系列课程主要分为3大阶段:(1)首先掌握计算机视觉必备算法原理,结合Opencv进行学习与练手,通过实际视项目进行案例应用展示。(2)进军当下最火的深度学习进行视觉任务实战,掌握深度学习中必备算法原理与网络模型架构。(3)结合经典深度学习框架与实战项目进行实战,基于真实数据集展开业务分析与建模实战。整体风格通俗易懂,项目驱动学习与就业面试。 建议同学们按照下列顺序来进行学习:1.Python入门视频课程 2.Opencv计算机视觉实战(Python版) 3.深度学习框架-PyTorch实战/人工智能框架实战精讲:Keras项目 4.Python-深度学习-物体检测实战 5.后续实战课程按照自己喜好选择就可以

2019 AI开发者大会

2019 AI开发者大会(AI ProCon 2019)是由中国IT社区CSDN主办的AI技术与产业年度盛会。多年经验淬炼,如今蓄势待发:2019年9月6-7日,大会将有近百位中美顶尖AI专家、知名企业代表以及千余名AI开发者齐聚北京,进行技术解读和产业论证。我们不空谈口号,只谈技术,诚挚邀请AI业内人士一起共铸人工智能新篇章!

机器学习初学者必会的案例精讲

通过六个实际的编码项目,带领同学入门人工智能。这些项目涉及机器学习(回归,分类,聚类),深度学习(神经网络),底层数学算法,Weka数据挖掘,利用Git开源项目实战等。

Python数据分析师-实战系列

系列课程主要包括Python数据分析必备工具包,数据分析案例实战,核心算法实战与企业级数据分析与建模解决方案实战,建议大家按照系列课程阶段顺序进行学习。所有数据集均为企业收集的真实数据集,整体风格以实战为导向,通俗讲解Python数据分析核心技巧与实战解决方案。

YOLOv3目标检测实战系列课程

《YOLOv3目标检测实战系列课程》旨在帮助大家掌握YOLOv3目标检测的训练、原理、源码与网络模型改进方法。 本课程的YOLOv3使用原作darknet(c语言编写),在Ubuntu系统上做项目演示。 本系列课程包括三门课: (1)《YOLOv3目标检测实战:训练自己的数据集》 包括:安装darknet、给自己的数据集打标签、整理自己的数据集、修改配置文件、训练自己的数据集、测试训练出的网络模型、性能统计(mAP计算和画出PR曲线)和先验框聚类。 (2)《YOLOv3目标检测:原理与源码解析》讲解YOLOv1、YOLOv2、YOLOv3的原理、程序流程并解析各层的源码。 (3)《YOLOv3目标检测:网络模型改进方法》讲解YOLOv3的改进方法,包括改进1:不显示指定类别目标的方法 (增加功能) ;改进2:合并BN层到卷积层 (加快推理速度) ; 改进3:使用GIoU指标和损失函数 (提高检测精度) ;改进4:tiny YOLOv3 (简化网络模型)并介绍 AlexeyAB/darknet项目。

2021考研数学张宇基础30讲.pdf

张宇:博士,全国著名考研数学辅导专家,教育部“国家精品课程建设骨干教师”,全国畅销书《张宇高等数学18讲》《张宇线性代数9讲》《张宇概率论与数理统计9讲》《张宇考研数学题源探析经典1000题》《张宇考

三个项目玩转深度学习(附1G源码)

从事大数据与人工智能开发与实践约十年,钱老师亲自见证了大数据行业的发展与人工智能的从冷到热。事实证明,计算机技术的发展,算力突破,海量数据,机器人技术等,开启了第四次工业革命的序章。深度学习图像分类一直是人工智能的经典任务,是智慧零售、安防、无人驾驶等机器视觉应用领域的核心技术之一,掌握图像分类技术是机器视觉学习的重中之重。针对现有线上学习的特点与实际需求,我们开发了人工智能案例实战系列课程。打造:以项目案例实践为驱动的课程学习方式,覆盖了智能零售,智慧交通等常见领域,通过基础学习、项目案例实践、社群答疑,三维立体的方式,打造最好的学习效果。

DirectX修复工具V4.0增强版

DirectX修复工具(DirectX Repair)是一款系统级工具软件,简便易用。本程序为绿色版,无需安装,可直接运行。 本程序的主要功能是检测当前系统的DirectX状态,如果发现异常则进行修复

期末考试评分标准的数学模型

大学期末考试与高中的考试存在很大的不同之处,大学的期末考试成绩是主要分为两个部分:平时成绩和期末考试成绩。平时成绩和期末考试成绩总分一般为一百分,然而平时成绩与期末考试成绩所占的比例不同会导致出现不同

Vue.js 2.0之全家桶系列视频课程

基于新的Vue.js 2.3版本, 目前新全的Vue.js教学视频,让你少走弯路,直达技术前沿! 1. 包含Vue.js全家桶(vue.js、vue-router、axios、vuex、vue-cli、webpack、ElementUI等) 2. 采用笔记+代码案例的形式讲解,通俗易懂

c语言项目开发实例

十个c语言案例 (1)贪吃蛇 (2)五子棋游戏 (3)电话薄管理系统 (4)计算器 (5)万年历 (6)电子表 (7)客户端和服务器通信 (8)潜艇大战游戏 (9)鼠标器程序 (10)手机通讯录系统

相关热词 c# 不能序列化继承类 c# char* 调用 c# 开发dll模板 c#添加控件到工具箱 c#控制台组合数 编程计算猴子吃桃问题c# c# wpf 背景透明 随机抽取号码软件c# c# 开发环境 c# 属性和字段
立即提问