
FFI::load 메서드의 인자로 전달할 수 있는 데이터 타입은 다음과 같습니다.
- 정수(int): FFI::INT
- 부호가 없는 정수(unsigned int): FFI::UINT
- 실수(float): FFI::FLOAT
- 문자열(string): FFI::STRING
- 포인터(pointer): FFI::POINTER
- 구조체(struct): FFI::STRUCT
- 배열(array): FFI::ARRAY
예를 들어, C 라이브러리의 메서드가 다음과 같이 정의되어 있다고 가정해 보겠습니다.
#hostingforum.kr
c
void add(int a, int b, int* result);
Ruby에서 이 메서드를 호출하기 위해 FFI::load 메서드를 사용할 수 있습니다.
#hostingforum.kr
ruby
require 'ffi'
module MyLibrary
extend FFI::Library
ffi_lib 'mylibrary'
attach_function :add, [:int, :int, :pointer], :void
end
result = FFI::MemoryPointer.new(:int)
MyLibrary.add(1, 2, result)
puts result.read_int
위 예제에서, `:int`는 정수(int) 타입을 의미하고, `:pointer`는 포인터(pointer) 타입을 의미합니다. `result` 변수는 `FFI::MemoryPointer` 객체를 사용하여 메모리 주소에 대한 포인터를 생성합니다. `read_int` 메서드는 포인터의 값을 읽어 정수로 반환합니다.
2025-04-14 16:05