PerlのXSでObjective-Cを使うときに気をつけること

QuickDraw API で定義されている Move マクロが、perl の handy.h の中で定義されているものとコンフリクトするため、

#include "EXTERN.h"
#include "perl.h"
#include "XSUB.h"
#include "ppport.h"

// undefine Move macro, this is conflict to Mac OS X QuickDraw API.
#undef Move

#import <Foundation/Foundation.h>

こんなようにしてperl関係のヘッダーをincludeしたあと#undefしてあげたうえでCocoaのヘッダーをimportするようにすると良い。

なお、 Foundation 以外にリンクするときはまた別の問題があるかもしれない。

基本XS使うときは、まず単体でうごくCやObjective-Cのコードを書いて、XSはそれをつなぐだけという感じで使っているので、ガチでXS内でごりごり処理を実装することはなく、perlのMoveマクロは使ったことないから、それを使いたいときにどうすればいいかは知らない。

memmoveのラッパーみたいだけど、NewxやSafefreeなどのようにこれ使ったほうが良いとかたぶんあるんだろうけど。

by typester / at 2010-12-31T01:46:00 / perl · xs · objc / Comment