最新国产在线视频_一色一伦一区二区三区的区别_欧美成人影院亚洲综合图_国产亚洲一区精品_大胆欧美熟妇xxbbwwbw高潮了_久久午夜无码鲁丝片

  • 您的位置:首頁 > 新聞動態 > 技術文章

    PYTHON調用C++DLL的參數傳遞方法

    2019/9/16??????點擊:

    1. PYTHON與C++參數變量的比較

    2. 準備一個C++ DLL的測試工程文件,并編譯產生DLL文件,代碼如下:
    C++文件(cpp):(注意在函數聲明上加上extern "C" 的修飾)

    #include “testdll.h”
    extern "C" {
        __declspec(dllexport) int Double(int x);
        __declspec(dllexport) float floatAdd(float a,float b); 
        __declspec(dllexport) void HelloWorld(char * str); 
        __declspec(dllexport) void Ints(int * arr,int n); 
    }
    int Double(int x){
        return x*2;
    }
    float floatAdd(float a,float b) {
        return a+b;
    }
    void HelloWorld(char * str){
        puts(str);
    }

    在python腳本中使用ctypes加載dll :
     from ctypes import *
     dll = cdll.LoadLibrary('DLL/dlltest.dll')
    請注意:


    1.如果不加任何修飾,默認傳入參數為int,傳出參數也為int 

    2.對于int以外的類型(如float),需要聲明python函數的傳入參數類型,傳出參數類型 fun.argtypes=[c_float,c_float]  #定義傳參類型
     fun.restype=c_float             #定義返回值類型
     a=fun(c_float(1.4),c_float(1.2))
     print(type(a))
     print(a)
     輸出:2.5999999046325684 

    3.對于字符串char* ,在聲明傳入參數類型時,需要聲明為字符指針,然后分配一塊char數組,后把這個數組強制轉換為字符指針 并且,在把python腳本中的數據結構導入c++中時,需要把str轉換為bytes或者bytesarray類型,并且進行迭代器分解
     hello=dll.HelloWorld
     hello.argtypes=[POINTER(c_char)]    #傳入參數為字符指針
     STR=(c_char * 100)(*bytes("WiseGlove數據手套",'utf-8')) #把一組100個的字符定義為STR
     cast(STR, POINTER(c_char))
     hello(STR)
     輸出:WiseGlove數據手套 

    4.對于其他數據類型的數組,(例如int*),操作相似: Ints=dll.Ints
     Ints.argtypes=[POINTER(c_int),c_int]
     INT=(c_int * 100)(*[1,2,3]) #把列表傳入變長參數args*中
     cast(INT, POINTER(c_int))
     Ints(INT,c_int(3))
     輸出:1 2 3  

    5.對于返回值為數組的情況,可以直接使用索引去訪問,但是下標操作[]不是從迭代器中取對象,而是地址偏移: def fillHoleCpp(im):
         dll = cdll.LoadLibrary("bfs.dll")
         bfs=dll.bfs
         bfs.argtypes = [POINTER(c_int),c_int]
         bfs.restype = POINTER(c_int)
         a = np.asarray(range(16), dtype=np.int32).reshape([4, 4])
         if not a.flags['C_CONTIGUOUS']:
             a = np.ascontiguous(a, dtype=a.dtype)  # 如果不是C連續的內存,必須強制轉換
         IMG = cast(a.ctypes.data, POINTER(c_int))  # 轉換為ctypes,這里轉換后的可以直接利用cty
         cast(IMG, POINTER(c_int))
         length=a.size
         ans=bfs(IMG,c_int(length))
         print(type(ans))
         for i in range(0,length):
             print(ans[i],end=' ')
    怎么樣, 小伙伴們學會了Python語言調用C++dll的方法了嗎? 使用這個方法,可以調用WONGLOVE數據手套的sdk開發庫獲得數據手套的角度數據哦~~



    主站蜘蛛池模板: 丁香五月亚洲综合在线国内自拍 | 国产成人99久久亚洲综合精品 | 91午夜视频福利 | 中文乱码一二av | 国产一二久 | 无套内谢孕妇毛片免费看 | 亚洲另类无码专区首页 | 亚洲欧美日韩成人一区 | 青草青草久热精品视频在线观看 | 免费一级毛片在线观看 | 久久久久中文伊人久久久 | 天天在线看无码AV片 | 亚洲自偷自拍另类第1页 | 国产百合互慰无码视频 | 毛片视频一区二区三区 | 久久午夜无码人妻鲁丝片午夜精品 | 国产精品久久久久久久久久久痴汉 | 美女视频很黄很a免费国产 久久深夜视频 | 国产东北女人做受av | 久久机热综合热国产热中文 | 国产成人尤物在线视频 | 免费无码又爽又刺激激情视频软件 | 三年片在线观看免费视频 | 99在线观看视频免费 | 99久久无码一区人妻A片孕妇 | www.xxoo色黄av| 四虎影视4HU4虎成人 | 久久爱影视 | 欧美牲交视频免费观看 | 欧美一个色资源 | 小13箩利洗澡无码视频免费网站 | 九九99无码精品视频在线观看 | 国产成人午夜福利在线观看蜜芽 | 亚洲日本无码一区二区三区 | 国产中文成人精品久久久 | 91av资源九色蝌蚪视频 | 久久久久波多野结衣高潮 | 美女的胸18岁以下禁止观看 | 国产精品99久久久久久人 | 黑巨茎大战日本人妻 | 2018天天躁夜夜躁狠狠躁 |