での経験を移植しD2007+TntControlsへの応用D2009?
-
23-08-2019 - |
質問
かなり規模の大きな(フリーウェア)プロジェクトを書きデ2007を使用しているもの TntUnicodeControls
の TntLXControls
図書館と私の計画デ2009年.
残念ながら私が使っている方の図書館の至るところに私のプロジェクト:
- 交換のためのVCL制御をUnicode力
- Win32APIラッパー(主との比較のための文字列)
- の機能強化の
TntLXForms
,TntLXRegistry
, ... - 第三者の部品を使用する
TntControls
.(VirtualTrees,SpTBXLib、更新のためのD2009ご用意しております)
お願いしまでの経験やご提案を移植などのプロジェクトデ2009年.のでお勧め最初に切り替え(商業) TMS
Unicodeす
解決
私は2007年から2009年にTNTを使用してC ++ Builderアプリケーションを移植していてD2009のUnicodeへの切り替えが遅れると歓迎され、この一部を支援することができます。しかし、それは遷移は、おそらく過去にUnicodeを必要としていない人のために簡単です、そしておそらくまだないことを残念です。 、私のように、あなたはUnicodeを必要とし、それを提供するために、トロイWolbrinkの偉大TNTコントロールを使用した場合、あなたはむしろ、より複雑な仕事をしている...
良いニュースは、 TMSソフトウェアにいるからTNTControlsの新しいバージョンがあるということですD2009をサポートしています。私はこれを見たが、それはただの移植を容易にするためのネイティブVCLコンポーネントの上に「ファサード」層で期待していませんでした。私はあなたの他のライブラリを再構築することができれば、それを使用することを検討したい。
しかし、あなたは良いかもしれネイティブVCLコントロールに戻って、そしてその理由は、文字列型です。 TNTコントロールは常に前後にUnicode文字列を渡すためにWideStringにを使用している、とあなたはよくWideStringに使用することは、あなた自身のコードを散在している可能性があります。これは動作しますが、それはCOM BSTRタイプを「ラップ」としてWideStringには本当にただCOM相互運用機能のために使用すべきであるとして、それは理想的ではありません。 D2009でネイティブUnicode文字列は、参照カウントされ、大幅に高速である必要があります。
、または、多分簡単に検索を行うと、あなたが持っているあなたの.DFMと.PASファイル(に置き換える - あなたはネイティブVCLのものでTNTのコンポーネントを交換することを決定した場合は、は、コマンド「部品の交換」GExpertsを使用することができますTでTTNTを置き換えるために、テキスト形式、そうしない)。
他のヒント
GExpertsをインストールします。 TXXXXコントロールにTTntXXXを変換することができますIDEアドイン「コンポーネントを交換してください」があります。一度のために試してみてください、そして、それは大丈夫だ場合だけチェック「プロジェクトでevrywhereを交換してください」。
SpTbxとVirtualTreesのみを再コンパイルすることができます - 彼らは両方のサポートD2009。
あなただけのUnicode API-Sを呼び出すためにWinAPIのラッパーを使用した場合は、彼らはまた、D2009で動作するはずです。
これはTntLXコントロール(TntLXForms、TntLXRegistry、...)であなたを残します。彼らはサポートされないので、とにかくそれらを変更する良い機会であるかもしれません。
私は、次のリソースをお勧めします:
マルコ・カントゥのデルファイ2009ハンドブック第3章(ユニコードへの移植) http://www.marcocantu.com/dh2009/する
ニック・ホッジス記事(Unicodeの世界でデルファイ) http://blogs.codegear.com/nickhodges/2008/11/20/ 39149 の
私はどちらかの方法は、多くの作業になるだろうと思います。おそらくより多くのようにあなたが前にそれをユニコード互換性を持たせるためにすべての作業を行っていなかった場合よりも。私は個人的にTMSのUnicodeのコントロールを忘れてしまうと、バックVCLに行きます。これは、将来的にはより多くの痛みを保存します。 (これらのコントロールに対して何も、あなたを気にしません。)
また、そのD2009の文字列を覚えて、あなたは間違いなくあなたのアプリケーションで使用されているD2007のWideStringのと同じものではありません。だから、あなたはとても勤勉(AnsiStringのた)文字列から変更WideStringにのすべてのインスタンスは、(今のUnicodeStringされる)文字列に再び戻って行く必要があります。