2013-06-24 2 views
0

Я хочу добавить функцию 'Open_Buffer_Continue' в оболочку ctypes MediaInfoDLL.py, привязки here и MediaInfoDLL.cs Связывание C# уже реализует эту функцию, поэтому это возможно.Как передать «файл» в функцию cpp, которая ожидает «Buffer» в типах Python?

Как я передать следующее:

file = open('./file.avi', 'rb') 

к MediaInfo CPP Open_Buffer_Continue, который ожидает:

( const ZenLib::int8u * Buffer, 
    size_t     Buffer_Size 
) 

?

это то, что я до сих пор:

MediaInfo_Open_Buffer_Init = MediaInfoDLL_Handler.MediaInfo_Open_Buffer_Init 
MediaInfo_Open_Buffer_Init.argtype = [c_size_t, c_size_t] 
MediaInfo_Open_Buffer_Init.restype = None 

MediaInfo_Open_Buffer_Continue = MediaInfoDLL_Handler.MediaInfo_Open_Buffer_Continue 
MediaInfo_Open_Buffer_Continue.argtype = [c_size_t, c_size_t] # NOT SURE HERE var 1 
MediaInfo_Open_Buffer_Continue.restype = c_size_t 

MediaInfo_Open_Buffer_Finalize = MediaInfoDLL_Handler.MediaInfo_Open_Buffer_Finalize 
MediaInfo_Open_Buffer_Finalize.argtype = [c_void_p] 
MediaInfo_Open_Buffer_Finalize.restype = None 
+0

Что является Continu ред? – eryksun

+0

процесс подачи большего количества данных, если функция возвращает 0, этого достаточно, в противном случае его можно снова запустить –

+0

@ user1434058: 'Open_Buffer_Continue' ожидает ** буфер **, ранее связанный с файлом. например check: http://mediainfococoa.googlecode.com/svn/trunk/Lib/MediaInfo/Reader/Reader_File.cpp Итак, я думаю, что есть еще больше работы, например «Open_Buffer_Init» – Pragmateek

ответ

1

Я ничего не знаю о mediainfo, но это выглядит как ZenLib::int8u* указатель на байт, так что лучше всего использовать будет:

MediaInfo_Open_Buffer_Continue.argtype = [c_char_p, c_size_t] 

Затем прочитайте файл в строку и передать его:

with open('./file.avi','rb') as f: 
    data = f.read() 
MediaInfo_Open_Buffer_Continue(data,len(data))