欧美一区二区三区老妇人-欧美做爰猛烈大尺度电-99久久夜色精品国产亚洲a-亚洲福利视频一区二区

python調(diào)用c函數(shù)的方法-創(chuàng)新互聯(lián)

創(chuàng)新互聯(lián)www.cdcxhl.cn八線動態(tài)BGP香港云服務(wù)器提供商,新人活動買多久送多久,劃算不套路!

創(chuàng)新互聯(lián)建站主營南州晴隆網(wǎng)站建設(shè)的網(wǎng)絡(luò)公司,主營網(wǎng)站建設(shè)方案,成都app開發(fā),南州晴隆h5成都小程序開發(fā)搭建,南州晴隆網(wǎng)站營銷推廣歡迎南州晴隆等地區(qū)企業(yè)咨詢

小編給大家分享一下python調(diào)用c函數(shù)的方法,希望大家閱讀完這篇文章后大所收獲,下面讓我們一起去探討吧!

linux版的動態(tài)庫

寫個(gè)簡單的C代碼,test.c

#include <stdio.h>
#include <stdlib.h>
char * printStr(const char *p,const char *q)
{
    printf("%s",p);
    printf("%s",q);
    return "djstava";
}

通過以下命令編譯成動態(tài)鏈接庫

gcc -fPIC -shared -o libtest.so test.c

python3中調(diào)用

要調(diào)用C庫中的函數(shù),需要用到ctypes這個(gè)模塊

# -*- coding: utf-8 -*-
from ctypes import *
handle = cdll.LoadLibrary('libtest.so')
func = handle.printStr
func.argtypes = (c_char_p,c_char_p)
func.restype = c_char_p
tmp = handle.printStr("hello".encode("utf-8"),"world".encode("utf-8"))
print(tmp.decode("utf-8"))

程序執(zhí)行結(jié)果:

helloworld

程序解釋

func.argtypes = (c_char_p,c_char_p)
func.restype = c_char_p

這2句是分別設(shè)置參數(shù)數(shù)據(jù)類型和返回值類型,如果不進(jìn)行設(shè)置,直接調(diào)用的話,參數(shù)可以正常接收,但是返回值永遠(yuǎn)是個(gè)int值,傳入的字符串參數(shù)必須為encode("utf-8"),否則在c庫中僅會打印為首字符。

handle = cdll.LoadLibrary('libtest.so')
ret = handle.printStr("hello".encode("utf-8"),"world".encode("utf-8"))

windows版的動態(tài)庫

Visual Studio編譯dll,在需要拋出的方法前加入__declspec(dllexport), 比如下面C代碼:

__declspec(dllexport) unsigned int crc32( const unsigned char *s, unsigned int len)
{
  unsigned int i;
  unsigned int crc32val=0xffffffff;
printf("len==%d\n",len);
  for (i = 0;  i < len;  i ++)
      crc32val =  crc32_tab[(crc32val ^ s[i]) & 0xff] ^ ((crc32val >> 8)&0x00FFFFFF);
  return ~crc32val;
}

然后打開VS X64工具命令行提示符,進(jìn)入到C源碼目錄,分別執(zhí)行以下兩條命令,第一條命令是生成目標(biāo)文件.obj,第二天命令是鏈接目標(biāo)文件,生成動態(tài)庫。

cl /c crc.c
link /dll crc.obj

至此,dll文件就生成了,它就是我們需要的動態(tài)鏈接庫,dll的調(diào)用跟so的方法一樣。

看完了這篇文章,相信你對python調(diào)用c函數(shù)的方法有了一定的了解,想了解更多相關(guān)知識,歡迎關(guān)注創(chuàng)新互聯(lián)-成都網(wǎng)站建設(shè)公司行業(yè)資訊頻道,感謝各位的閱讀!

本文標(biāo)題:python調(diào)用c函數(shù)的方法-創(chuàng)新互聯(lián)
分享URL:http://chinadenli.net/article26/cophjg.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供電子商務(wù)網(wǎng)站營銷定制開發(fā)微信小程序網(wǎng)站設(shè)計(jì)公司域名注冊

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來源: 創(chuàng)新互聯(lián)

成都網(wǎng)站建設(shè)公司