Win32APIを直接コールしまくってるソースをLazarusでコンパイルできるだろうか。。
Delphiプログラマーには有名なここのサイトのこのソースをLazarusでコンパイル。
まあ、コンパイルできない。
ここを見ながらUses句を書き換える。。
LazarusとDelphiの主要なユニットの違い
* Windows->Interfaces, LCLIntf, LCLType, LCLProc, VCLGlobals, ...)に置き換えます。
LCLはWindowsに限ったものではないので、DelphiのWin32APIに直接アクセスするためのWindowsユニットは、インターフェースに抽象化されてLCLIntfユニットからアクセスするようになります。覚えておいて頂きたいことは、Lazarusはwin32をエミュレートするのではないので、多くの関数が欠落していたり、Win32と同等な働きをしない関数があります。これらの関数はDelphiとの互換性だけのためにあり、とにかく移植するだけのためにあります。LCLは多くの型を利用し、 LCLTypeやVCLGlobalsを必要とします。LCLProcは、FreeThenNilのようなDelphi5以降で導入された便利ないくつかの関数や、コントロールのばめに余分なアンパーサンドを取り除くDeleteAmpersandsのようなものを含みます。 Interfacesユニットは、適切なwidgetsetを初期化するための.lprファイルをインクルードするために必要です。
* Messages->LMessagesに置き換えます。
Delphiでは、TControlメッセージ(Win32イベントコールバックでは、WM_CALLBACK形式になっています。)とそれらに関連するメッセージはMessageユニットにあります。 LCLでは、これらの型やメッセージ、構造体などの定義は、LMessagesユニットにあります。大抵の場合、WM_MOUSEENTER は LM_MOUSEENTER に、TWMMouse は TLMMouseに、といった具合に、WMをLMに変更されています。
うむ。上手くいかない。
問題は僕自身がWin32APIをあまり理解していないことだなあ。。
VCLばっかり使ってるからな。。
まあいい勉強になると思うので、しばらく格闘してみようと思います。
0 件のコメント:
コメントを投稿