しらたまのコミッタ日記

2007-03-29

[][]DLLなどの型について 17:56

いろいろコミットしました。

その中に、コミットメッセージだけでは理解しづらいものがあるのでここで解説。

DLL関数などの型の内部置換方法を変更。

今回のコミットDLLの型の置換を、完全一致固定から部分一致の繰り返しに変更しました。

これによりポインタが扱いやすくなりました。

例えば「int *a」などは「PLONG a」などに置き換えられて、引数を参照渡しにしておけば、ちゃんと引数を書き換えて返してくれます。

しかし、これには副作用もあります。

置き換えた型を見てもらえばわかるように、先頭の「P」はポインタであることを示し、それをのぞいた文字列で型を表します。

その型の判断は「P」がつかないときと同じ判断方法で行います。

つまり、「PH*」などという型は「PDWORD」に置き換えられます。

これによって、例えばなでしこ変数型である「PHiValue」などは「PDWORD」に置き換えられてしまい、そのまま書いただけでは誤作動を起こしてしまいます。

回避策としては「P」の後ろに「_」とか適当な文字を挟んでおけばよいです。

 

私はこの副作用を含めても、この変更を適用した方が便利だと思ったんですがどうなんでしょうねぇ。

 

もしここ見ておられる方で、この機能が適用されたdnakoを使ってみたいと思われる方は、dnako.dllを置いておきますのでテストをしてみて下さい。

そして、もし不都合がありましたらご報告下さい。リポジトリロールバックなど何らかの対策をとります。

※元のdnako.dllリネームするなどして、決して上書きしないようご注意下さい。

http://white-ball.hp.infoseek.co.jp/dnako_debug.zip

2007-03-25

[]なでしこ開発合宿 22:33

なでしこ友の会メーリングリストで提案された合宿に行ってきました。

集まってやるというのは、すごく作業がはかどりますね。それしかすること無いですし。

SubVersionのリビジョンが55から一気に66まであがりました。

半分くらい私のコミットですが、クジラ飛行机さんは一回のコミットの変更量が多いので、多分私の倍以上はコードを書いたんじゃないでしょうか?

私はすぐに実装できそうなところしか手を付けていませんしねぇ。


[][]文字コード変換 22:33

ついさっきコミットしました。

これで長らく使えなかったUnicode変換がまともに動くようになるはずです。

ちなみに原因は使用している定義ファイルが古すぎて、Unicode対応の関数が使えなかったためでした。

'96とか古すぎです。

2007-03-12

[][]動的作成のバグ修正 18:40

1つ前の記事で言っていたバグを修正することができました。

引数に渡された要素に、直接グループを作ったり、変数登録をしたりするのではなく、別に変数一個作りそれに対するリンクを張るようにしました。

これで変数削除エラーとか、無効なポインタ処理とかは出なくなりました。

あと、元の変数スコープを見て、新たに作る変数の登録先を決めるようにしたんですが、配列の要素を渡されたときにきちんと判定できません。

なぜなら、配列変数IDを持っていないので、変数の検索に引っかからないのです。

変数の要素からその親の配列変数を取得できればいいんですが、それは難しいですよねぇ。

ですので、現在変数IDのない要素はグローバル固定になります。

うーん、引数を一つ増やして、ローカルに登録するか、グローバルに登録するかを決められたらいいんですかね。

DaviDavi2012/09/13 11:03I will be pttuing this dazzling insight to good use in no time.

bmohgmbmohgm2012/09/14 01:36BqJOW9 <a href="http://kewcwimmuadc.com/">kewcwimmuadc</a>

dfivlrdfqujdfivlrdfquj2012/09/14 06:09LtHaqZ , [url=http://mjxbaoyeoqfn.com/]mjxbaoyeoqfn[/url], [link=http://kwniepimnbcq.com/]kwniepimnbcq[/link], http://qfkkvsopgjki.com/

ixhsmaznoscixhsmaznosc2012/09/16 10:52dWxO7s <a href="http://exmymacglhol.com/">exmymacglhol</a>

lejlujlejluj2012/09/17 03:10wZWvNC , [url=http://dhtabqlxugaw.com/]dhtabqlxugaw[/url], [link=http://mkrguoaigxxy.com/]mkrguoaigxxy[/link], http://mbiossoobjwz.com/

2007-03-10

[]グループ動的生成時動かないイベントがある 22:32

以前は「作成」命令の方からたどって原因がわからなかったので、今度はグループメンバ検索の方からたどることに。

で、調べたところ動くイベント(クリックした時)はnako_group_findMemberを使ってグループを検索していました。

動かないイベント(マウス~~した時)はnako_getGroupMemberを使っていました。

前者では直接グループ変数関数に渡して、そこからメンバを探しているのに対し、後者では変数名(文字列)を渡して、それをTHiSystem.GetVariableでグループ変数を探してからメンバを検索します。

このTHiSystem.GetVariableは、ローカルスコープ、グローバルスコープ、グローバル(別ネームスペース?)の順で検索するのですが、どうやら動的生成したものの場合、その検索が失敗してるようです。

おそらく、動的生成した時にスコープ変数を登録していないのだと思うんですが、どこをどういじったもんでしょう。

グループだからグローバルスコープのような気もしますが、作成先の変数ローカルスコープならそれに従った方がいいような気もします。

追記:

とりあえず、ローカルスコープに追加してみてテスト

サンプルコードでは問題はないようですが……

さらに追記:

問題ありました。変数削除エラーが出ました。

2007-03-03

[]引数の型 22:01

前にこんな感じの関数を作ったことがありました。

ガウスジョルダン法(Aを)

 Nとは整数

 NはAの表行数

 もし(N==(Aの表列数+1))ならば

  それは「」

  戻る

 Pとは実数。Dとは実数。

 Iとは整数。Jとは整数。Kとは整数

 Kを0からN-1まで繰り返す

  PはA[K][K]#ピボット係数

  JをKからNまで繰り返す#ピボット行をPで割る

   A[K][J]=(A[K][J])/P

  Iを0からN-1まで繰り返す#ピボット列の掃き出し

   もしI<>Kならば

    D=A[I][K]

    JをKからNまで繰り返す

     A[I][J]=A[I][J]-D*A[K][J]

 AのNを表列取得


「2,1,3

1,1,-10」をCSV取得

それをガウスジョルダン法

表示

これで連立方程式の解が求まります。

この関数引数の型を「配列」と指定すると、動かなくなってしまいます。

どうやら関数内では引数一次元配列になってしまっている模様。

型指定することで、二次元配列から一次元配列への変換が行われてしまっているのかもしれません。

でも、CSV取得の結果変数に代入して、それを引数として渡せば問題ないんですよねぇ。

AnwarAnwar2012/09/13 17:27At last! Soemnoe with real expertise gives us the answer. Thanks!

rdxlebkurdrdxlebkurd2012/09/14 02:32H3cqsW <a href="http://nwzvtbhwczhk.com/">nwzvtbhwczhk</a>

yvjknlzkyvjknlzk2012/09/16 02:36OAcIj3 , [url=http://wrvdxlwatnem.com/]wrvdxlwatnem[/url], [link=http://ouglimbaiitl.com/]ouglimbaiitl[/link], http://crznorzavfma.com/

ejgxkqhehheejgxkqhehhe2012/09/16 20:58QBH2Qi <a href="http://zeyotigjvndg.com/">zeyotigjvndg</a>

ofjwrovczofjwrovcz2012/09/17 04:04TTmbNW , [url=http://drytyvjfgyvz.com/]drytyvjfgyvz[/url], [link=http://cdakyvbgzceq.com/]cdakyvbgzceq[/link], http://wujrcpnnipjq.com/

200612
200701020304050708101112
20080103040506070912
200904
20100204
201104