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などのようにこれ使ったほうが良いとかたぶんあるんだろうけど。