C言語
5日前ActionScriptを用いて外部からデーターを受け取ることを考えていたけれども、
もうひとつの選択子として、swfにデーターを埋め込んであげる方法もあることにきずいた。
いろんな人に使ってもらえるものを作るだったら、バイナリーで配布するのが
いいなぁーと考えつつ、私は現在PHPというスクリプトを使っていることにきずいた。
問題は、
現在Window用に配布されているC言語用のバイナリーを私は持っていない
(Ming0.3βソースは持っているけれども)
Ming0.2用のバイナリーは
WinMing
で手に入るのでこれを利用することにしよう。
Ming0.3以降に追加された機能などはloadMovie()などを用いて
PHP/Mingで作成したものを利用するなどできれば
バージョンの古いMingを用いても特に問題は生じないだろう。と考え
。 WinMing使用することにした。
(自分よりもバージョンが上のものをMingで
取り込めるかどうかは確認していません)
MinGW
コンパイラーはMinGwを使用することにした。
(
BitWalk
で配布されているMinGw Program Kit のほうを利用)
WinMing
WinMingで配布されているものには
DLLファイルと.hファイルとLibファイルが
含まれている。
しかし、ただ単に.hを読み込むだけではうまくコンパイルできなかった。
(関数が認識されなかった)
DLLファイルを読み込むには暗黙的リンクと動的リンクがあったことを
私は思い出した。 暗黙的リンクは
確かVC6ではDLLとLibをプロジェクトに追加するような
ことをした覚えがあるのだが、MinGwではどのようにすればよいのだろうか?
わからない・・。
とりあえず、動的なリンクのほうを利用することにしよう。こちらのほうは
読み取るDLLファイルをプログラム上で指定できるのでたぶんできるだろう。
ためしにDLLファイルを読み込んでみる
#include<stdio.h>
#include<windows.h>
typedef void (__stdcall *_Ming_useSWFVersion)(int);
_Ming_useSWFVersion Ming_useSWFVersion;
int main()
{
HINSTANCE hDll;
hDll = LoadLibrary("winming.dll");
if(hDll ==NULL)
{
printf("not load Dll");
}
else
{
printf("load Dll\n");
Ming_useSWFVersion =
(_Ming_useSWFVersion)GetProcAddress(hDll,"_Ming_useSWFVersion@4");
if(!Ming_useSWFVersion)
{
printf("not load func \n");
return 0
}
else
{
Ming_useSWFVersion(100);
}
}
return(0);
}
とりあえずコンパイルは通った。実行すると予想どおり
Only SWF versions 4 and 5 are currently supported!と出たので
うまくDLLファイルをロードすることができたようである
("_Ming_useSWFVersion@4"という名前はLibファイルを参照しました)
(また上のソースはFreeLibraryを書き忘れています。)
|
#include<stdio.h>
#include<windows.h>
typedef void (__stdcall *_Ming_useSWFVersion)(int);
_Ming_useSWFVersion Ming_useSWFVersion;
typedef void *SWFMovie;
typedef SWFMovie(__stdcall *_newSWFMovie)(void);
_newSWFMovie newSWFMovie;
typedef int(_stdcall *_SWFMovie_save)(SWFMovie,char*);
_SWFMovie_save SWFMovie_save;
int main()
{
HINSTANCE hDll;
SWFMovie A;
hDll = LoadLibrary("winming.dll");
if(hDll ==NULL)
{
printf("not load Dll");
}
else
{
printf("load Dll\n");
Ming_useSWFVersion = (_Ming_useSWFVersion)GetProcAddress(hDll,"_Ming_useSWFVersion@4");
newSWFMovie = (_newSWFMovie)GetProcAddress(hDll,"_newSWFMovie@0");
SWFMovie_save = (_SWFMovie_save)GetProcAddress(hDll,"_SWFMovie_save@8");
if(!Ming_useSWFVersion)
{
printf("not load func \n");
return 0;
}
else
{
Ming_useSWFVersion(5);
A = newSWFMovie();
SWFMovie_save(A,"kyoro_c.swf");
}
}
return(0);
}
作成したファイル
とりあえず 空のSWFファイルを作ってみた。
とてもくたびれてしまった。
やはりwinming.hファイルを使わないとだめだな。
と思いつつ、今日、Mingをいじるのはこのぐらいにしておこう。
寝る前に
現在でこの日記は4回目だが、ないように
ぜんぜん一貫性がない。これは目的なくMingをいじっているのが
原因であることは間違いない。
そろそろ何か作品をつくたいなーと思いつつも。
時間が なーーーい。
時間がないなぁーとおもいつつも、Mingをいじっている私っていったい何なのだろう?
たぶん切り詰めれば時間はたくさんあるのだろう
うーん、眠い。
|