簡體   English   中英

ctypes-將帶有指針的結構傳遞給另一個結構

[英]ctypes - passing a struct with a pointer to another struct

在我的C代碼中,我有:

typedef struct{
    int info1;
    int info2;
    MoreData* md;
} BasicData;

typedef struct{
    int extinfo[100];
    char stuff[100];
} MoreData;

現在,我有了一個C庫函數,該函數將BasicData作為參數,我想從Python調用它。 為此,我構造了一個ctypes類:

class BasicData(Structure):
    _fields_ = [("info1", c_int),
                ("info2", c_int),
                ("md", ??????)]

我的問題是我要填寫什么? 能夠將此結構傳遞給C函數的空間(或者我需要完全不同的東西嗎?)。 MoreData只是在計算過程中使用,我不需要在我的Python代碼中讀取它,因此可以從C庫級別處理為其分配內存。 我只需要傳遞具有正確指針類型的BasicData結構即可。

如果您不需要分配或使用MoreData結構,那么就ctypes而言, md只是一個通用指針。 使用void * -即c_void_p

您需要定義一個包裝其他結構的class MoreData(Structure) 然后將其作為("md", POINTER(MoreData))

C保證struct字段是按順序分配的,因此,如果您真的不想從Python訪問md ,則只能在_fields_指定它(因為它位於最后)。 然后,ctypes會相信您只有前兩個成員的結構。

Ctypes可以一次性訪問C結構,但是如果您經常將C代碼與Python捆綁在一起,那么我真的建議您查看Cython。

編輯:正如eryksun指出的那樣(feeble pun),我忘記了POINTER。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM