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
"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 是...