JNIで起動したJavaVMからnativeメソッドをコールバック

JNIを使ってCなどのnativeプロセスからJavaVMを起動し、さらにそのJavaVMからnativeメソッドをコールバックさせる方法です。Webで調べた際に、意外と情報が見つからなかったのでメモ。

結論から言ってしまうと、RegisterNativesというJNI関数を使用します。この関数は、jclassとJNINativeMethod構造体の配列を引数に取り、Java側のnativeメソッド宣言とnative側のメソッド本体を動的に結びつけます。

具体的な使い方は、以下のサンプルコードを参考にしてください。
Continue reading →

pythonでsqliteのテーブルのカラム名取得

DBにある任意のテーブルの内容を表示するツールは、DBを使ったシステム開発を経験された方は使ったことがあると思います。

そのようなツールを実装するには、テーブルの名前や含まれるカラムの名前といった通常のクエリーでは取得することができない情報を取得する必要があります。
PostgreSQLやOracleではシステムカタログという、テーブルの構造などを格納するDBシステムの内部テーブルにアクセスして、そのような情報を取得することができます。

pythonのsqlite3でそのような動作をさせたくて調べた結果をメモします。

Continue reading →

いまさらC言語のexternで悩む

とある製品のソースコードを眺めていたときに疑問に思って調べたことをメモします。

C言語で通常、大域変数(グローバル変数)を複数のソースファイルで共有する場合、共通でincludeするヘッダファイルにextern int abc;みたいに書いて、ソースファイルのいずれか1つに実体をint abc;みたいに書くと(私は)思っていたのですが、その製品のソースではヘッダファイルの方にint abc;とあり、各ソースファイルにextern int abc;という風に書かれています。
Continue reading →

FlashDevelopでMain.mxmlの文字エンコーディングをUTF-8にする

以前から使用しているFlashDevelopですが、ほかのサイトで公開されている日本語化ファイルを適用しても、新規で「Flex 3 Project」でデフォルト生成されるMain.mxmlの文字エンコーディングが「7 bit」のままで毎回ファイルメニューで「UTF-8」変更していました。

今回マシンの再セットアップに伴い、現時点最新の「3.0.0 RC2」を導入してみたのですが、残念ながら変わらないようです。色々試してみて解決策を見つけたのでメモしておきます。

Continue reading →