#title(綾織メモ)

Q. SHIORI みたいなものはありませんか。~
A. SHIORI を使って下さい。

//面接官「特技は綾織プログラミングとありますが?」~
//学生 「はい。綾織プログラミングです。」~
//        (中略)~
//面接官「帰れよ。」 

//----
//#ls
#lsx(prefix=開発メモ/綾織メモ/)
----

#contents

* 文法 [#f512b3ae]

** AddItem ブロック内での break はダメゼッタイ [#e00b8ca3]
- http://www.praesens.co.jp/file/pdk/manual/index_c1.html#doc2_sect:mark7
> AddItemのブロック内({}内)で,そのAddItem-Choiceを含む制御構造から脱出するためにbreakを使用しないでください.ブロック外の不定の位置にジャンプすることになります.
<

** ランタイムエラー [#m46eee3d]
コンパイル時にはエラーにならないが実行時にエラーとなるもの

*** 配列を参照渡し [#qf6e2cf8]
- 
#highlight(ayaori:nogutter:nocontrols){{
void foo(string &attr[][])
{
    // hogehoge
}
}}
- もともと参照渡しなので & は不要。
-- エラーは関数を呼んだ時点か attr にアクセスした時点か要チェック
-- デリファレンスは可能か?
*** 引数として NULL を渡す [#f88cb83b]
- 2006/10/08
- 内部エラー:(1689)
- モジュールを越えるのが問題か?

*** NULL の比較でエラー? [#l8261871]
- 2006/10/16
- 内部エラー:(3709)
- 
#highlight(ayaori:nogutter:nocontrols){{
if((entry = script_getEntry(section, opt)) == NULL)
{
	return "[" + section + "." + opt + "]";
}
}}
- ここで script_getEntry が NULL を返したときに発生か
- とりあえず返り値として NULL を返すユーザ関数を作るのはやめたほうがよさげ
- ↓だとエラーにならない?(2006/11/25)
-- 
#highlight(ayaori:nogutter:nocontrols){{
entry = script_getEntry(section, opt)
if(entry == NULL)
{
	return "[" + section + "." + opt + "]";
}
}}
*** LoadBitmapW でファイルが見つからない? [#kf247559]
- 2006/10/26
- 内部エラー:Stack under flow(-1)
- これは意外とクリティカルかもしれんね

*** 不正な代入式:UNKNOWN = string(-1) [#ifa51ddd]
- 
#highlight(ayaori:nogutter:nocontrols){{
string hoge[]; hoge = "mogemoge";
}}
*** 引数の型が宣言と一致しない:$1(-1) [#q0bb7363]
- 2006/12/02
- 
#highlight(ayaori:nogutter:nocontrols){{
void hoge(int i);
hoge(Pow(2.0, 4.0));
}}
- リファレンス及び Prototype150.aya には int Pow(double x, double y) とあるが、これって返り値 double でない?
- とりあえずキャストしてみる: hoge( (int)Pow(2.0, 4.0));

*** BREGMatch()の引数でパターン末尾の/を忘れる [#w67ff7f0]
- 2014/04/18
- EAccessViolation(-1)

** ayac が落ちる [#c7178d05]
- 2006/10/01
- 
#highlight(ayaori:nogutter:nocontrols){{
max_pages = ((lengthof pref) / items_per_page) + 1;
}}
*** action 内で関数リファレンスを呼ぼうとする [#kde6d79b]
- 2006/11/25
- 
#highlight(ayaori:nogutter:nocontrols){{
action MouseUpL@(false)
{
	void &ref_func(int a) = dummy_func;
	ref_func(12);
}
}}
** while/for ループでの注意 [#z9ba8aa4]
- continue は使用できない。

** 引数として関数をとる関数 [#td4111e7]
- 
#highlight(ayaori:nogutter:nocontrols){{
int TimerCreate( int interval,
                 int callstyle,
                 void &func( int handle , string param ),
                 string param )
}}

- 引数 void &func(int handle, string param) には void hoge(int handle, string param) { ... } で定義した関数名 (この場合は hoge) を渡す
- see also: [[綾織メモ/リファレンス (参照)>開発メモ/綾織メモ/リファレンス (参照)]]
** グローバル変数名はモジュール間で重複してはならない [#se815b13]
- from http://www.ne.jp/asahi/hira/page/persona/pt020914_halca2002.html
- from http://www.din.or.jp/~hirak/persona/pt020914_halca2002.html
> グローバル変数は、extern する/しないに関わらず重複してはいけないみたいだ。
<
- とりあえずグローバル変数にはモジュール毎にプレフィックス付けるなどして回避

** 可変長配列の初期値は不定ではない [#c5e5c6b8]
- http://www.praesens.co.jp/file/pdk/manual/index_c1.html#doc2_sect:vararray


// ----------------------------------------------------------------------------


* 関数 [#oa7c29b8]

** StrEncodeURL()の特性 [#mbedcca5]

- 変換前
  !"#$%&'()+,/:;<=>?@[\]^`{|}~*-.0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ_abcdefghijklmnopqrstuvwxyz
- 変換後
 +%21%22%23%24%25%26%27%28%29%2B%2C%2F%3A%3B%3C%3D%3E%3F%40%5B%5C%5D%5E%60%7B%7C%7D%7E*-.0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ_abcdefghijklmnopqrstuvwxyz

- つまり、StrEncodeURL() によって変換される文字は
  !"#$%&'()+,/:;<=>?@[\]^`{|}~

** インフォデリで cBeforeNewsPlay() に渡される文字列 [#r8ef3c54]
- 実際には改行なし
 AID=1&
 Title=%94z%90M%83e%83X%83g&
 StartHour=_&
 EndHour=_&
 Day=1111111&
 PlayCount=1&
 StartDate=2005-04-10&
 EndDate=2005-04-11&
 Gender=_&
 Address=_&
 Delimiter=dabad686a866c3f04f438174a7bf4104&
 genre=STDMGR_NH_79&
 Command=normal&
 PlayCounter=1&
 Author=mxproject&
 Author_e_mail=&
 Priority=

** TimerCreate() のタイマーは作成した時点で動き出す [#c24c71c7]
- TimerStart しなくても動いてる様子 (2006/10/16)
- 最初から呼ばれるとマズイ場合はすぐに TimerStop しておくべきか
** [[GetBitmapIndex():http://www.praesens.co.jp/file/pdk/manual/func/input_func.html#GetBitmapIndex]] の返り値 [#y52f61b4]
- リファレンスだとインデックスなしのときは空文字列とあるが実際は NULL が返ってくるっぽい (2006/11/09)

** GetHTTP() / ThrowHTTP() の結果 [#rc0dc348]
- ..\System\HttpResult
- エラーでないときは 0 みたい (2006/11/16)
- 権限なしの場合 -1

** プロパティに NULL を書き込もうとしても何も起こらない [#k99eafd2]
- プロパティの値は以前のまま (2006/12/03)

// ----------------------------------------------------------------------------
* その他 [#aafbf123]

** コンテキストメニューからそれっぽくウィンドウ位置固定/解除 [#l8c91081]
- 
#highlight(ayaori:nogutter:nocontrols){{
action StartUp@(false)
{
	MenuItemAdd("ウィンドウ位置固定(&F)", 0, 100, 1, toggleFixWindow, "");
	MenuItemSetState("ウィンドウ位置固定(&F)", (GetProperty("VdConfig\\MainWin\\DraggableRect") == "0,0,0,0"));
}

void toggleFixWindow(string item, string param)
{
	if(GetProperty("VdConfig\\MainWin\\DraggableRect") == "0,0,0,0")
	{
		PutProperty("VdConfig\\MainWin\\DraggableRect", "");
		MenuItemSetState(item, false);
	}
	else
	{
		PutProperty("VdConfig\\MainWin\\DraggableRect", "0,0,0,0");
		MenuItemSetState(item, true);
	}

	ReflectConfig();
}
}}
- VdConfig\MainWin\Fixed を使った方がどう考えても良い (2006-09-26)
- 
#highlight(ayaori:nogutter:nocontrols){{
action StartUp@(false)
{
	MenuItemAdd("ウィンドウ位置固定(&F)", 0, 100, 1, toggleFixWindow, "");
	MenuItemSetState("ウィンドウ位置固定(&F)", (GetProperty("VdConfig\\MainWin\\Fixed") == "1"));
}

void toggleFixWindow(string item, string param)
{
	if(GetProperty("VdConfig\\MainWin\\Fixed") == "1")
	{
		PutProperty("VdConfig\\MainWin\\Fixed", "0");
		MenuItemSetState(item, false);
	}
	else
	{
		PutProperty("VdConfig\\MainWin\\Fixed", "1");
		MenuItemSetState(item, true);
	}

	ReflectConfig();
}
}}
** 起動している他のキャラの検出 [#hba3f3b3]
- [[キャラクター制作掲示板 - 他のキャラを知る方法:http://www.praesens.co.jp/pws/develop/pdkbbs/wforum.cgi?mode=allread&no=1742&page=45]]
- 
     1. [1743] Re: 他のキャラを知る方法 - 投稿者:中西@プラエセンス 投稿日:03/11/18(Tue) 17:37 <URL>
  
            > 自分のデスクトップで既に起動している他キャラを知る方法はありませんか?
            > L11系を使うのが本当なんでしょうが、サインインせずに知る方法はありませんか?
  
            int L11GetPersonas( int& handle, string PID )
            を使うわけですが,自分のPCについてであれば,PIDに"own"を指定します.
            こうすることで自分自身を指定できますが,この場合は特別処理で,
            サインインしていなくてもL11系関数が利用できます.
-- ローカルのキャラに関してはサインイン不要らしい。

** 全キャラクターの型番を得る [#r412781a]
- [[キャラクター制作掲示板 - GetProperty関数によるプロパティ値の読み可能領域に関しまして:http://www.praesens.co.jp/pws/develop/pdkbbs/wforum.cgi?mode=allread&no=1845&page=15]]
-- タイヤネコの Test.aya を参照とのこと。プロパティからベンダーコードリストを取得、同名のフォルダに対して EnumFile し、フォルダが存在すればその中の .psn ファイルを調べる。
-- [[MXCL>開発メモ/MXCL]] に実装。
- system.db にアクセスできるなら psntable テーブルを読むのも手か

** キャラクタの再起動 [#x9e5524b]
- exapack.lst を用意しておき、SwitchPackage で起動時と同じパッケージに切り替える

** 吹き出しにαチャンネルを持つ画像を用いた場合 [#ne7bba6c]
- ブレンディングはできないみたい
- TransparentBorder プロパティは MsgBox にも適用可能みたい

** 更新完了時の挙動 [#lde65f23]
- 処理系が一旦リセットされるのでグローバル変数などは必要に応じて再度初期化 or プロパティから復帰などの処理が必要
- see also: [[タイヤネコ:http://www.praesens.co.jp/pws/develop/download_pdk.phtml]]の Event.aya
-- 基底状態でなくても再起動するのか要調査 (2006/09/26)
--- 基底状態になるまで再起動されないみたい (2006/10/27)
- 右クリックメニューはリセットされる (2008/03/11)
- RegisterMouseUpFunction のコールバックは更新後も効いてる (2008/03/11)
-- でもまあちゃんと初期化しなおしたほうがいいよね
** exa バイナリの互換性 [#f46c35ab]
- PWS2002 向けの ayac でコンパイルした exa ファイルは PWS1.x では実行できない

** index.fet が 301/302 の場合、リダイレクト先を追わずにエラーとなる [#k98cb9d7]
- 無限ループするよりはマシってことかしら?
-- http://www.praesens.co.jp/file/pdk/manual/index_c3.html#doc3_1440
> なお,ファイル中に,
#Reference www.personaware.gr.jp/~haruna/
と記述する事で,"一回だけ"他のURLのindex.fetを参照し,その飛んだ先で通常通りの処理を行います.サイト移転などの際に,一時的に使用することを推奨します.
** キャラクタデータのアップロードは全て (テキストファイルであっても) BINARY モードで [#wc94b04e]
- ローカルで index.fet を生成した場合、アップロード時に文字コードや改行コードが変換されるとハッシュが一致しなくなる

** exapack.lst にコメントは書けない [#f9665941]
- 起動時にアドレス違反 (?) とかが発生

** SwitchPackage でキャラクタ再起動 [#i73f80a5]
- exapack.lst がないと SwitchPackage できない
-- 空の exapack.lst を置いておくと SwitchPackage できる (Chararina 3.32β3, 2007/11/02)

** キャラデリ先でDBプラグインがロードできない? [#c2fb6c55]
- 2014/03/30


#highlight(end)
----
[[FrontPage]]