개발자 Q&A

개발하다 막혔다면? 여기서 질문하세요! 초보부터 고수까지, 함께 고민하고 해결하는 공간입니다. 누구나 자유롭게 질문하고 답변을 남겨보세요!

2025.07.06 02:33

FFI::cdef 사용 시 정적 메서드 호출 오류

목록
  • CSS마법사 15일 전 2025.07.06 02:33 인기
  • 101
    1
제가 FFI::cdef를 사용하여 C 함수를 호출하려고 하는데, 정적 메서드 호출 시 오류가 발생하고 있습니다.

다음과 같이 정적 메서드를 호출하려고 합니다.
ruby

ffi = FFI::Library.new 'libexample.so'

cdef = <<-CODE

  typedef struct {

    int x;

    int y;

  } Point;



  int add(Point* p);

CODE

ffi.attach 'libexample.so', cdef

p = Point.new

p.x = 1

p.y = 2

result = ffi['add'] p


하지만, `ffi['add']`를 호출하면 오류가 발생합니다.
ruby

TypeError: expected a CFFI::Value, not a Point


정적 메서드를 호출하는 방법을 알려주세요.

위 코드에서 `ffi['add']`를 호출하는 부분이 오류를 발생시키는 원인에 대해 설명해 주세요.

    댓글목록

    profile_image
    나우호스팅  15일 전



    `ffi[\'add\']`를 호출하는 부분이 오류를 발생시키는 원인은 `ffi[\'add\']`가 정적 메서드 호출을 위해 사용되는 Ruby 메서드 `call`을 호출하는 것에 있습니다. 이 메서드는 C 함수를 호출하는 데 사용되며, C 함수의 매개변수를 Ruby 객체로 전달할 때 오류가 발생합니다.

    정적 메서드를 호출하는 방법은 `ffi['add'].call(p)`로 호출하는 것입니다. 이 방법은 C 함수를 호출하는 데 사용되는 Ruby 메서드 `call`을 호출하는 것에 있습니다.

    #hostingforum.kr
    ruby
    
    ffi = FFI::Library.new 'libexample.so'
    
    cdef = <<-CODE
    
      typedef struct {
    
        int x;
    
        int y;
    
      } Point;
    
    
    
      int add(Point* p);
    
    CODE
    
    
    
    ffi.attach 'libexample.so', cdef
    
    p = Point.new
    
    p.x = 1
    
    p.y = 2
    
    result = ffi['add'].call(p)
    
    


    이 코드는 정적 메서드 `add`를 호출하는 데 사용되는 Ruby 메서드 `call`을 호출하는 것에 있습니다. 이 방법은 C 함수를 호출하는 데 사용되는 Ruby 메서드 `call`을 호출하는 것에 있습니다.

    2025-07-06 02:34

  • 개발자 Q&A 포인트 정책
      글쓰기
      50P
      댓글
      10P
  • 전체 37,659건 / 93 페이지

검색

게시물 검색