Ето моята ситуация:
Бих искал да извикам функцията 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 (просто като извикам оригинала), но ми се струва, че извикването на указатели на функции би трябвало да е възможно по някакъв начин..