C 関数に渡すために、Python で次のデータ型を構築する必要があります。
struct {
unsigned a,b,c;
char data[8];
};
ただし、構造体へのポインターではなく、データフィールドへのポインターを実際に関数に渡す必要があり、これを行う方法がわかりません。
これが私がこれまでに持っているものです:
from ctypes import *
class MyStruct(Structure):
_fields_ = [("a",c_uint), ("b",c_uint), ("c",c_uint), ("data",c_char*8)]
mystruct = MyStruct(0,1,8,"ABCDEFGH")
external_c_function(mystruct.data)
CIには次の機能があります:
int external_c_function(char *data) {
int a = ((unsigned *)data)[-1];
int b = ((unsigned *)data)[-2];
int c = ((unsigned *)data)[-3];
...
}
問題は、関数が呼び出されると、「データ」が「ABCDEFGH」を正しく指すことですが、その前の構造体データの残りを取得しようとすると、ゴミになります。私は何を間違っていますか?mystruct は、実際の C 構造体のようにメモリに順次保持されていませんか? 配列で何かおかしいことが起こっているのではないかと思います: 私は実際にこのようなばかげたことをしていますか?
struct {
unsigned a,b,c;
char *data; // -> char[8]
};
もしそうなら、どうすれば正しく行うことができますか?