Python呼叫c c 函式(1)

2021-09-08 09:12:37 字數 1189 閱讀 7259

python開發效率高,執行效率低。而c/c++恰恰相反。因此在python指令碼中呼叫c/c++的庫,對python進行擴充套件,是很有必要的。使用python api, ,需要安裝python-dev。

test.cpp檔案如下

#include 6/python.h> //

包含python的標頭檔案

//1 c/cpp中的函式

int my_c_function(const

char *arg)

//2 python 包裝

static pyobject * wrap_my_c_fun(pyobject *self, pyobject *args)

//3 方法列表

static pymethoddef mycppmethods =,

};//

4 模組初始化方法

pymodinit_func initmycppmodule(void

)

make:

g++ -shared -fpic test.cpp -o mycppmodule.so

編譯完畢後,目錄下會有乙個mycppmodule.so檔案

test.py檔案如下

[python]view plain

copy

# -*- coding: utf-8 -*-

import mycppmodule  

#匯入python的模組(也就是c的模組,注意so檔名是mycppmodule  

r = mycppmodule.mycppfun1("ls -l")  

print r   

print

"ok"

執行lhb@localhost:~/maplib/clib/pyc/invokec$ python test.py 

總計 20

-rwxr-xr-x 1 lhb lhb   45 2010-08-11 17:45 make

-rwxr-xr-x 1 lhb lhb 7361 2010-08-12 10:14 mycppmodule.so

-rw-r--r-- 1 lhb lhb  979 2010-08-11 17:45 test.cpp

-rw-r--r-- 1 lhb lhb  181 2010-08-11 17:45 test.py0ok

C C 函式呼叫 值傳遞1

char getmem void void test void a.hello b.無輸出 c.hello0world d.不確定 答案 d 解析 在getmen函式中,陣列p是乙個區域性變數,儲存在系統記憶體的棧 stack 區。在getmem函式呼叫結束時候,系統會自動銷毀陣列p。函式getme...

C C 函式呼叫約定

c c 函式呼叫約定 關於c c 函式呼叫約定,大多數時候並不會影響程式邏輯,但遇到跨語言程式設計時,了解一下還是有好處的。vc 中預設呼叫是 cdecl 方式,windows api 使用 stdcall 呼叫方式,在dll 匯出函式中,為了跟windows api 保持一致,建議使用 stdca...

C C 函式呼叫方式

cdecl 是c declaration的縮寫 declaration,宣告 表示c語言預設的函式呼叫方法 所有引數從右到左依次入棧,這些引數由呼叫者清除,稱為手動清棧。被呼叫函式不會要求呼叫者傳遞多少引數,呼叫者傳遞過多或者過少的引數,甚至完全不同的引數都不會產生編譯階段的錯誤。stdcall 是...