Вот моя ситуация:
Я хотел бы вызвать функцию av_free_packet
ffmpeg:
// avformat.h
static inline void av_free_packet(AVPacket *pkt)
{
if (pkt && pkt->destruct)
pkt->destruct(pkt);
}
Но, к сожалению, эта функция static inline
, поэтому ее нет в связанной библиотеке.
Однако это очень простая функция, которую я мог бы переопределить на Haskell. И вот что я не могу понять, как это сделать. Вот частичная попытка (.hsc):
av_free_packet :: Ptr AVPacket -> IO ()
av_free_packet pkt =
when (nullPtr /= pkt) $ do
destruct <- (#peek AVPacket, destruct) pkt :: IO (FunPtr (Ptr AVPacket -> IO ()))
when (nullFunPtr /= destruct) $ funPtrToFun destruct pkt
funPtrToFun :: FunPtr a -> a
funPtrToFun = ?
На данный момент я мог бы прибегнуть к реализации этой функции в C (просто вызывая оригинал), но мне кажется, что вызов указателей функций должен быть каким-то образом возможен.