サードパーティの DLL から関数をロードしました。経由でライブラリのエントリ ポイントである関数にアクセスできましたctypes.windll.LoadLibrary
。この関数には、多くの 2 次元配列を含む 30 個のパラメーターがあります。関数プロトタイプは、ほとんどの場合、パラメーターが参照によって渡されることを指定します。関数呼び出しを行うと、内部変数に問題があることを示すリターン コードが返されます。これにより、間違ったポインタを渡したように思えます。(あいまいです。)私の質問は、どのような状況でctypes.byref
参照として渡す必要があるかです。たとえば、次のものがあるとします。
double_matrix = (ctypes.c_double * 100) * 100
my_array = double_matrix()
my_array または ctypes.byref(my_array) を渡す必要がありますか?
my_string = ctypes.create_string_buffer("Hello world!")
types.create_string_buffer() を使用して作成されたオブジェクトはどうですか? 参照渡しが必要な場合、my_string または ctypes.byref(my_string) を渡す必要がありますか?
編集:
DLL のコードがありません。
関数プロトタイプは、各タイプが約 5 つか 6 つあることを除いて、基本的にこのように見えます。
int process(char *input, int indicator, double (*dmatrix)[100][100], int (*groups)[100]);
ありがとう