FfidlでC言語のエクスポート関数に配列のポインタを渡して内容を書き換えてもらう
なぜかFfidlで配列を引数に渡すサンプルがどこにも見当たらなかったので、作ってみました。 C言語のDLL側のサンプル。 関数pow2は任意の大きさの整数型配列とそのサイズを受け取り、 その配列の各要素を2乗した値に置き換えるものです。 /* pow2.c */ __declspec(dllexport) void pow2(int* out, int sz) { int i; for(i = 0;...
View ArticleTcl array関係のお役立ち関数2つ
Cでは定数を定義するのに#defineを使うことが多いようですが、 Tclではプリプロセッサがないので、同じ方法は使えません。 グローバル変数を使うというのが最初に思い浮かぶと思うんですが、 switch文の分岐に変数を使うには特殊な方法が必要なことなどを考えるといろいろと 不都合なことが多いんですよ(すごくやっつけな説明です)。...
View ArticleTkSQLite Tcl script function
こんなに便利な機能があったのに使ってなかったなんて。 こういうスクリプトを書いておいて、TkSQLiteの初期設定->SQLiteのタブに登録しておくと、 # unixepoch.tcl proc UnixEpoch {t} { clock format $t -format "%Y-%m-%d %H:%M:%S" } db function unixepoch UnixEpoch...
View Articleipconfigを呼ばないでMACアドレスのリストを取得する(twapi 3.1.17対応ほか)
「ipconfigを呼ばないでMACアドレスのリストを取得する」を書いた時点のtwapiのバージョンはたしか3.0.32だったんじゃないかと思いますが、3.0.32の次のバージョン3.1.17が去年の暮に出ていました。出てるのは知ってたんですが、8.4サポート廃止ということで使ってはいませんでした。 SourceForge.com twapi 3.1.17...
View ArticleXOTcl というか Next Scripting Framework 2.0b3のコンパイル
XOTclの最新安定版はteacupで配布してる1.6.7ですが、今のところTcl8.6b2で使うことができません。 私の場合、XOTclに依存しまくってるので、8.4から8.6に1つ飛ばしで移行しようと思ったところ、これだけが引っかかっていて、 仕方なく8.5に移行しました。 一方XOTcl開発チームの人々はNext Scripting Framework...
View Articlebreak可能なコードブロック
Tclにはgotoみたいに直列に書いたコードをスキップする制御構文がない。 例えばなんかデータを受信して、チェックしたり加工したりしたあとでどこかに記録するけど、 結果によらず受信回数はカウントしときたい場合、こんなコードを書いたとする。 proc on_receive {data} { global cnt set res [validate $data] if {$res == 1} {...
View ArticleLinkedList in XOTcl
いわゆる双方向連結リストというデータ構造ですが、かつてはリチャードストールマンに、Tclには構造体がないからlinked listを作れないと指摘されていました。今ではいくつもあるオブジェクト指向拡張を使い、クラスを導入すればTclでも他の言語と同じような形で実装できます。...
View ArticleTcl/Tkで任意のフォルダをデフォルトファイラーで開く
たまにやるけど忘れるので。スペースを含まないときは別のやり方でも開くのですが、 一般的には以下のようにします。cmdの引数にエスケープされた状態で渡すというのがキモです。 string mapの変換ルールではエスケープシーケンスが適用されることに注意します。 set office_dir {C:\Program Files\Microsoft Office} set...
View ArticleTclでベクトル計算するサンプル
SXGAのリモートデスクトップウィンドウをアスペクト比を保ちつつ65%に縮小し、FullHDのディスプレイの右下に配置したい。手計算でも簡単にできることだが、今まで使ってなかった行列計算ライブラリの練習台に使うことを思いついた。 +-----------------------------+ | | | | | | | | | | | nw------------+ | |xxxx | | | x...
View ArticleTcl SQLite build configuration
Prerequisites Build tool = MinGW GCC v4.9.2 Tcl build path = /c/src/tcl8.6.3/win Tcl install path = /c/bin/tcl8.6.3 SQLite3 build path = /c/src/sqlite-autoconf-3080704/tea wxSQLite3 secure source path...
View Article