2012-01-19 4 views
3

저는 C로 루비를 임베딩하고 있습니다. C로 작성된 구조체를 구조체 값을 사용하여 루비 스크립트에 전달해야합니다. 성공적으로 구조체 선언을 rb_struct_define 및 초기화 rb_struct_new 함께 수행 한 있지만 C- 스타일 (struct Address {...}) 정의 된 구조체를 전달할 수 없습니다.C 초기화 된 struct를 임베디드 루비 인터프리터에 전달

나는 이것을 Data_Wrap_struct을 사용하여 수행 할 수 있다고 조언했지만, 제대로 작동하지는 않습니다.

내 예제 코드는 여기에 있습니다 : 당신이 루비 방법에 전달 무엇이든 https://gist.github.com/1641269

답변

2

은 루비 객체가 될 필요가있다, 당신은 직접 C 구조체 개체를 전달할 수 없습니다.

당신이 할 수있는 일은 구조체를위한 래퍼 객체를 생성하는 것입니다. 불행히도, 내가 아는 한 구조체의 멤버를 기반으로 자동으로이를 수행 할 방법이 없습니다. 적절한 메소드를 정의하기 위해 C 코드를 작성해야하는데, 구조체에 많은 멤버가있는 경우 약간 지루할 수 있습니다.

Data_Wrap_Struct 매크로는 C 구조체를 Ruby 객체로 래핑하는 데 사용하는 매크로입니다. 그런 다음 메서드의 구현에서 Data_Get_Struct을 사용하여 구조체를 언 랩핑하고 데이터에서 가져올 수 있습니다.

Here's an example 올바른 방향으로 안내해야합니다.

+0

대단히 감사합니다. 예제가 완벽하고 올바른 방향으로 정확하게 안내해줍니다. 나는 이것을 몇 시간 동안 찾고 있었다. – matejuh

관련 문제