強火で進め

このブログではプログラム関連の記事を中心に書いてます。

Flash 固有の機能を呼び出す方法

Flash C++ Compiler(FlasCC)では以下の様なヘッダファイルをインクルードすると Flash 固有の機能が呼び出せる様になります。

#include <AS3/AS3.h>
#include <Flash++.h>

しかし、これらの機能を使った場合にはビルド時のオプションを追加しないと以下の様なエラーが発生します。

/var/folders/4j/2mfjzbk93j324sd0hp5ycgmh0000gn/T//cc0cKUkh.o: error: undefined reference to '__ZN3AS32ui5flash6system12Capabilities17screenResolutionXE'
/var/folders/4j/2mfjzbk93j324sd0hp5ycgmh0000gn/T//cc0cKUkh.o: error: undefined reference to '__ZN3AS32ui5flash6system12Capabilities17screenResolutionYE'
/var/folders/4j/2mfjzbk93j324sd0hp5ycgmh0000gn/T//cc0cKUkh.o: error: undefined reference to '__ZN3AS32ui5flash6system12Capabilities10isDebuggerE'
/var/folders/4j/2mfjzbk93j324sd0hp5ycgmh0000gn/T//cc0cKUkh.o: error: undefined reference to '__ZN3AS32ui5flash6system12Capabilities15cpuArchitectureE'
/var/folders/4j/2mfjzbk93j324sd0hp5ycgmh0000gn/T//cc0cKUkh.o: error: undefined reference to '__ZN3AS32ui3varD2Ev'
/var/folders/4j/2mfjzbk93j324sd0hp5ycgmh0000gn/T//cc0cKUkh.o: error: undefined reference to '__ZN3AS32ui5flash6system12Ca
(以下略)

具体的には -lFlash++ と -lAS3++ を追加する必要が有ります。

ビルド例

今回は簡単に作成する為に FlasCC に付属している Sample フォルダ内に Sample というフォルダを作成し、 Makefile と sample.cpp というファイルを作成しました。

それぞれのファイルの内容はこちら。

Makefile

Sample:
	"$(FLASCC)/usr/bin/g++" $(BASE_CFLAGS) sample.cpp -emit-swf -swf-size=640x480 -lFlash++ -lAS3++ -o sample.swf

include ../Makefile.common

clean:
	rm -f *.swf

【sample.cpp】

#include <AS3/AS3.h>
#include <Flash++.h>

using namespace AS3::ui;

int main()
{
	int sx = flash::system::Capabilities::screenResolutionX;
	int sy = flash::system::Capabilities::screenResolutionY;
	printf("スクリーンの解像度: %dx%d\n", sx, sy);
	
	bool d = flash::system::Capabilities::isDebugger;
	printf("Debuggerで表示している?: %s\n", d ? "true" : "false");
	
	String cpu = flash::system::Capabilities::cpuArchitecture;
	char* cpuStr = internal::utf8_toString(cpu);
	printf("CPUのアーキテクチャ: %s\n", cpuStr);
	free(cpuStr);
	
	return 0;
}

これでこちらの記事で紹介した meke のコマンドを実行するとビルド出来ます。

SWFを開くとこの様に表示されます。