2010-06-18 3 views
2

Я пишу swig привязки для некоторых функций c. Одна из этих функций принимает float **. Я уже использую cpointer.i для обычных указателей и изучал carrays.i, но я не нашел способ объявить float **. Что вы порекомендуете?Как использовать float ** в Python с Swig?

интерфейс файла:

ехЬегп INT read_data (Const символ файл *, Int * n_, Int * m_, поплавок ** data_, Int ** classes_);

+1

Я предполагаю, что read_data() функция принимает эти указатели на указатели, так что значения могут быть возвращены ими? Вы можете рассмотреть возможность изменения функции Python, чтобы вернуть их как часть возвращаемого значения. – Petriborg

+1

@Petriborg, Дело в том, что я должен возвращать «классы», «данные», «m» и «n», и я не должен использовать структуру. – Framester

ответ

1

Этот ответ является ответом одного на связанный с ним вопрос. Фрейммер опубликовал об использовании ctypes вместо swig. Я включил его здесь, в случае, если какие-либо поисковые запросы в Интернете включают ссылку на его исходный вопрос.

Я использовал ctypes для нескольких проектов теперь и были вполне довольны результатами. Я не думаю, что я лично нужен указатель к указателю обертки еще, но, в принципе, вы должны быть в состоянии сделать следующее:

from ctypes import * 

your_dll = cdll.LoadLibrary("your_dll.dll") 

PFloat = POINTER(c_float) 
PInt = POINTER(c_int) 

p_data = PFloat() 
p_classes = PInt() 
buff  = create_string_buffer(1024) 
n1  = c_int(0) 
n2  = c_int(0) 

ret = your_dll.read_data(buff, byref(n1), byref(n2), byref(p_data), byref(p_classes)) 

print('Data: ', p_data.contents) 
print('Classes: ', p_classes.contents) 
Смежные вопросы