Звучит так, как будто у вас проблема со сборкой; Кажется, я помню, что я использовал ту страницу, на которую вы ссылаетесь, в качестве примера, когда писал интерфейс FFI в библиотеку Windows Win32 DDEML. Например, одна из структур, которые мы используем, это
typedef struct tagHSZPAIR {
HSZ hszSvc;
HSZ hszTopic;
} HSZPAIR, *PHSZPAIR;
#include "ddeml.h"
переносит это в файл DDEML.hsc
. Мы получаем к нему доступ:
data HSZPair = HSZPair HSZ HSZ
instance Storable HSZPair where
sizeOf _ = (#size HSZPAIR)
alignment = sizeOf
peek ptr = do svc <- (#peek HSZPAIR, hszSvc) ptr
topic <- (#peek HSZPAIR, hszTopic) ptr
return $ HSZPair svc topic
poke ptr (HSZPair svc topic) = do (#poke HSZPAIR, hszSvc) ptr svc
(#poke HSZPAIR, hszTopic) ptr topic
К сожалению, я не могу показать вам, к чему это компилируется в данный момент, потому что у меня нет удобной коробки Windows, но сгенерированный код был таким же, как указано выше, за исключением того, что #size HSZPAIR
заменено на (64)
или что-то еще и т. д.
(Если вы действительно хотите посмотреть, что было сгенерировано, или вам нужна помощь в сборке, напишите мне, и я помогу вам.)