我创建了以下C库来读取图像:

typedef struct {
    unsigned int height;
    unsigned int width;

    unsigned char* red; //length=height*width
    unsigned char* green;
    unsigned char* blue;
} Contents;

Contents readJPEGFile(const char* inFilename);

我真的不能在带有外函数接口(interface)的数组和结构中找到任何信息。
我将如何继续使用Haskell中的图书馆?

我尝试使用以下示例作为基础:http://therning.org/magnus/archives/315,但随后将hsc文件编译为仅包含上述c代码且仅包含其他内容的hs文件(当然无法编译)。

最佳答案

听起来好像您遇到了构建问题。我似乎确实记得,当我将FFI接口(interface)写入Windows Win32 DDEML库时,我以您引用的页面为例。例如,我们使用的结构之一是

typedef struct tagHSZPAIR {
    HSZ     hszSvc;
    HSZ     hszTopic;
} HSZPAIR, *PHSZPAIR;
#include "ddeml.h"将其带入DDEML.hsc文件。我们通过以下方式访问它:

数据HSZPair = HSZPair HSZ HSZ
实例可存储HSZPair,其中
sizeOf _ =(#size HSZPAIR)
对齐= sizeOf
peek ptr =做svc 主题 返回$ HSZPair svc主题
poke ptr(HSZPair svc主题)=做(#poke HSZPAIR,hszSvc)ptr svc
(#poke HSZPAIR,hszTopic)ptr主题

不幸的是,由于我没有方便的Windows框,因此目前无法显示该编译结果,但是生成的代码与上面相同,除了用#size HSZPAIR替换了(64)或其他类似内容外。

(如果您真的想查看生成的内容,或者在构建过程中需要帮助,请给我发送电子邮件,我会为您提供帮助。)

关于haskell - 如何在结构上使用Haskell的FFI?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/670221/

10-13 05:27