[fpr 3267] Delphi 2007とDelphi2009

psycho01 (at) edu.u-toyama.ac.jp

昨年、Marksheet Reader Seconic SR-3500を入手し、汎用の読み取りソフトを
書きました。プログラムからOMRAPI.DLLを呼び出せば良いようです。やったこ
とがないので、ちょっと困りました。

手順は、Sekonicから提供されているOMRAPI.HをDelphiに書き換えます。ヘッ
ダファイルはCで書かれています。

大昔、Cは本を読んだだけで、細かい文法が分かりません。なつかしの林晴比
古氏は、まだご活躍中で、「新訂新C言語入門」という本を買ってきました。
Visual Basic, Visual C#, C++, Delphiのコマンド対照本では、「Windowsプ
ログラミング逆引きクロス大辞典」を買いました。まあ、安心感です。

何ページにもわたるヘッダは簡単にDelphiに書き換えられません。変換ソフト
はないか探しました。ありました。http://www.drbob42.com/ です。早速、使
わせてもらいました。見事に変換できますが、コンパイルできません。エラー
だらけです。ヘッダーが大きすぎてうまく動作しないようです。

ヘッダは定義とか関数だけです。Delphiでは以下のようになります。かなりの
部分、手で直しました。

....定義が数ページ続きます。
const
    SR_SUCCESS                      = 0;
    SR_UNSUCCESSFUL                 = 1;
    SR_DISCONNECTED                 = 2;

....

type
  OMR_MARK_INFO = record
    xtype: LongInt;
    rows: LongInt;
    cols: LongInt;
  end {tagOMR_MARK_INFO};

.....読み取る関数、適当に書き直したもの。動くようです。

function OMR_GetMarks(iPage: Integer;
                         var pMarkInfo: OMR_MARK_INFO;
                         pMarks: PChar): boolean; stdcall ; external '
OMRAPI.dll';

Cに書き直したヘッダファイルをGroval_OMRAPI.PASとしてプロジェクトファイ
ルにincludeし、メインプログラムから次のようなコマンドで読み出します。


    if not OMR_GetMarks( SR_PAGE_FRONT, mark_info, marks ) then  begin
      ShowMessage('マークデータの取得に失敗しました。');
      OMR_Terminate;
    end;

プログラムを一時停止し、marksの値を調べると、ちゃんと所定の文字列が入
っています。成功しました。まあ、2週間ほど、真剣に悩んで楽しかったです。

プログラムが完成、マークシートも調査用のオリジナル版を作成し、半年ほど
放置していました。調査も終了、さあ、自動入力だとソフトを動かすと、動き
ますが、まったく読み取りません。いや読み取るのですが、まともではありま
せん。プログラムを一時停止して調べると、nulの文字列がいくつも欠けてい
ます。コラムとローがずれてしまいます。解決不能です。

原因は、Delphi 2009でコンパイルしたためでした。Delphi 2007でコンパイル
すると、正常動作しました。配布元、http://www.codegear.com/jp にDelphi 
2007と2009の違いを聞くと、文字の扱うがUnicodeになったことらしいです。
SR-3500はUSB対応で、USBから文字列を読み取ります。ここでエラーが起こる
わけです。この件はSekonicに連絡し、ライブラリのUnicode対応を頼みました。
私には手に負えませんからね。

まとめます。Delphi2009はUnicode対応です。少なくともUSBから文字列を読み
取る時にはエラーが起こる可能性が大きいので要注意です。ファイル入出力と
かは問題はありません。メーカーから提供されているライブラリがUnicode対
応でない場合が多いでしょうから、これは要注意です。

問題が解決するまで、Delphi 2009を使うのは留保し、Delphi 2007を使うこと
にしました。





                              --------------------------------------

                                                           村上宣寛

                                           〒930-8555 富山市五福3190
                                               富山大学人間発達科学部
                                             TEL/FAX 076-445-6367
                           HP:http://psycho01.edu.u-toyama.ac.jp/
                              --------------------------------------


スレッド表示 著者別表示 日付順表示 トップページ

ここは心理学研究の基礎メーリングリストに投稿された過去の記事を掲載しているページです。