문제

이미지를 읽기 위해 다음 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);

외부 기능 인터페이스와 함께 배열 및 스트러크를 사용하여 정보를 찾을 수 없습니다. Haskell에서 내 라이브러리를 어떻게 사용할 수 있습니까?

다음 예제를 기본으로 사용하려고했습니다. http://therning.org/magnus/archives/315 그러나 HSC 파일은 위의 C 코드 만 포함 된 HS 파일로 컴파일되었으며 더 이상 아무것도 컴파일 할 수 없습니다.

도움이 되었습니까?

해결책

마치 빌드 문제가있는 것처럼 들립니다. 나는 Windows Win32 DDEML 라이브러리에 FFI 인터페이스를 작성할 때 예를 들어 참조하는 바로 그 페이지를 사용했음을 기억하는 것 같습니다. 예를 들어, 우리가 사용하는 구조 중 하나는

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) 또는 무엇이든.

(실제로 생성 된 내용을보고 싶거나 빌드를 수행하는 데 도움이 필요하면 저에게 이메일을 보내 주시면 도와 드리겠습니다.)

다른 팁

기본 FFI 지원에는 스칼라 유형 만 포함됩니다. 주소 산술로 당신이하는 다른 모든 것. 그만큼 외국 유형에 관한 섹션 FFI 문서에서는 기본 사항을 제공하며 예제를 찾을 수 있습니다. FFI 요리 책.

한 번에 당신은 같은 도구를 사용할 수 있습니다 그린 카드 그리고 H/Direct 마샬링 및 비 모성 코드를 생성합니다. 내가 이해하지 못하는 이유 때문에이 도구는 오랫동안 업데이트되지 않았습니다. 내가 선택한 현재 도구를 알 수있는 한 hsc2hs.


편집 : 의견에 언급 된대로 (Ephemient에게 감사합니다), c2hs 또한 인기가 있으며 그 이후로 c2hs Manuel Chakravarty 출신입니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top