Linuxへの移植

[戻る]
ちぇき 2007/02/11(日) 18:25:31
はじめまして、ちぇきと申します。
現在、VC6.0でMFCを使用したWindowsアプリケーションを開発しておりますが、今度、
Linuxへの移植が必要となりました。

Linuxは全然さわった事が無い為、開発の方法も分かりませんが、市販もしくはフリーの
開発ツールを入手した場合、どれぐらいの変更が必要になるかを知りたいです。
具体的には下記のような項目を心配しています。

・MFCにて、クラスを使用しているソース
・レジストリ等の登録部
・ダイアログ・メニュー等の処理
・メッセージ関係の処理
・(MoveTo,LineTo等の)グラフィック関係

等です。
もし、この発言が不適切であれば申し訳ありません。
分かるようであれば教えて頂ければ幸いです。
よろしくお願いします。

επιστημη [HomePage] 2007/02/12(月) 00:46:48
>・MFCにて、クラスを使用しているソース
>・レジストリ等の登録部
>・ダイアログ・メニュー等の処理
>・メッセージ関係の処理
>・(MoveTo,LineTo等の)グラフィック関係

ほとんどすべて捨てて書き直し。

Ban 2007/02/12(月) 02:10:18
例えばVMWareのような「Linux上でWindowsを動かす」類の仮想技術が一番お手軽だと思いますが、
これで済むかは要件次第…。

また、WINEやその派生物などがうまく使えれば動く可能性も*ゼロではない*気がしますが、
機能制限が付いたり、不安定だったり、そもそも動かない可能性の方が高いのでは?
# このあたりは詳しくないのですが…。

で、最後が本当の移植ですが、書かれている範囲はほぼ全滅です。

・MFCにて、クラスを使用しているソース

MFCはMicrosoft社の独自ライブラリです。
Borland等にも提供されていたりしますが、基本的にWin32をベースとしたWindows用です。
正式なLinux版はないと思います。(少なくとも私は知りません)

・レジストリ等の登録部

Linuxには「レジストリ」というものがないので当然動きません。
設定ファイルや、ものによっては環境変数などを使いますが、Win32APIとは違うI/Fです。
(少なくとも私はLinux上で*実用でまともに使える*Win32実装を知りません)
# Win16APIはECMA-234標準もありますが、こちらもまともなLinux版は知らない….

・ダイアログ・メニュー等の処理

Win32APIも使えず、MFCも使えず、リソースの定義方法(rc)も互換性はありません。

・メッセージ関係の処理

Win32APIのメッセージ処理とは互換性がありませんのでこれも書き直しです。

・(MoveTo,LineTo等の)グラフィック関係

これもI/Fが違うので書き直しです。

基本的に、設計の骨子は似通っていて代替案があるとしても、
実際のI/Fが不一致で大幅修正になりがちです>UI部

既存のMFCアプリが、MVCで綺麗に設計/実装され、Document内部は標準C++の範囲のみで書いてある
など、
移植性に配慮されていればともかく、MFCべったりで書かれているとかなり面倒だと思います。

Ban 2007/02/12(月) 02:14:23
http://www-06.ibm.com/jp/developerworks/linux/020628/j_l-mfc.html
こんなページがあったので、参考までに張っておきます。
# 現実には、(UI部は特に)細部を見れば見るほど違いがあって完全に一致させるのは大変ですが、
# 骨子のイメージくらいは掴めるかと。
# 「MVCがしっかりしてるとModel部は流用できる比率が高い」

yoh2 [E-Mail] 2007/02/12(月) 12:17:19
WINEを使えば少しはマシになるかもしねません。

http://www.winehq.org/

Windowアプリの実行環境として有名なWINEですが、Windowsアプリケーションのソースコードを
Linuxネイティブアプリケーションとしてコンパイルする開発環境としても機能します。

# ただ、MFC依存部分は全面的に書き直しかも。

ちぇき 2007/02/13(火) 15:57:27
επιστημηさん、
Banさん、
yoh2さん、
Linuxの知識のまったく無い私には、本当に参考になる意見ありがとうございました。
結論を言えば、ネイティブアプリケーションとして作成するのはかなりの工数が発生する
と言う事ですね。

Banさんが言われる「Linux上でWindowsを動かす」方向で何とか検討してみたいと思います。
(かなり厳しいですが)

少し調査をして結果をご報告したいと思います。
あえて、解決チェックは入れないでおきたいと思います。

皆さん、本当にありがとうございました。

古いスレッドには追加発言できません。