.Netで作ったアプリをWindows7 64ビットで動作させる
Posted on :| コメント (0) | トラックバック (0)
吉田はおもに競馬とFXのソフトを作っています。Windowsプラットフォーム向けなので、OSのバージョンの影響を受けるのですが、最近まわりでもWindows7 64ビットのインストールされたPCが多くなってきました。
そこで、拙作競馬ソフトの「シンドローム2」を64ビット環境で動くようにしたので、その顛末を書きたいと思います。
■64ビット版 Windowsに内蔵されているWOW64という互換機能
WOW64とは、64ビット版 Windows XP、Windows Vista、Windows7に内蔵されている機能のことです。Windows On Windows64の略らしいのですが、エミュレータによって32ビットのWindowsアプリケーションを動作させる仕組みです。
しかし、このWOW64は欠陥があります。
(1) 32ビットアプリから64ビットDLLを呼べない
(2) 64ビットアプリから32ビットDLLを呼べない
それぞれにあったDLLやOCXを用意すればよいのですが、DLLやOCXはライブラリとして提供されているため、それを呼び出すアプリケーション側に制約がつくのです。当然、サードパーティが提供しているライブラリの中には、32ビット版しか用意されてないものもあります。
Windows7 64ビット版でInternet Explorerが32ビット版と64ビット版の両方がインストールされている最大の理由は、WOW64の欠陥によるものなのです。
たとえば、SleipnirやLunaScapeといったタブブラウザは、IEコンポーネントを利用します。シンプルぱっと2もIEコンポーネントを利用します。IEコンポーネントは利用しているソフトも多く、64ビット版しかインストールされていないと、当然32ビットアプリであるシンプルぱっと2は、64ビットIEコンポーネントを扱えないため、Windows7 64ビット上では動作しなくなります。
こういう事態を想定したマイクロソフトの次善の策と解釈すべきです。
■.Net Framework 2.0アプリをWindows7 64ビットに対応させる
シンドローム2は、.Net Framework 2.0上で動作します。作成したのはVB2005ですが、.Net上で動くソフトは、CLRとよばれる共通言語ランタイムにより管理されるマネージドコードです。
結論から言うと、マネージドコードで作成されたアプリ(VB、C#)は、何の変更も無しにWindows7 64ビットで動作します。これは、64ビット版の.Net Frameworkが自動的に32ビット、64ビットに置きかえて実行するためであり、作り手側は特に意識する必要がないといえます。ただし、マイクロソフトから出ているガイドラインは目を通しておく必要があります。
ここで勘違いがありました。64ビットのマネージドコードを生成するには、64ビットの.Net Framework上でないと駄目だと誤った情報を仕入れてしまったためです。
このことが、対応を後手後手におくらせた原因なのですが、結局確認のために64ビットWindows7が必要なことには代わりありません(いまは借り物のPCで確認してます)。
シンドロームに話を戻します。シンドローム2は本体プログラムの他に、データベースであるSQL Server2005 Express、JRA-VANが提供しているJV-Link(ActiveX.DLL)に依存しています。
SQL Server2005 Expressは、64ビット版と32ビット版が用意されています。Windows7 64ビットにインストールするには、64ビット版を入れる必要があります。これは問題ありません。
もうひとつは、JRA-VANのJV-Linkです。JRA-VANは、JV-Linkが32ビットと64ビット両方に対応していますと書いています。しかし、提供しているのは32ビットコンポーネントです。これがくせ者でした。WOW64の制約で、64ビットアプリケーションから、32ビットDLL、OCXは呼び出せません。JV-Linkの表現が曖昧なため、両方のバージョンが用意されていて、インストーラで切り分けているようにも取れました。
しかし、これはWOW64の事を指していたのです。
マネージドコードであるシンドローム2はWindows 7 64ビットに持って行くと、64ビットアプリケーションとして動作します。SQLも64ビット。これは問題がありません。
しかし、JV-Linkは32ビットなのでアクセス出来なくなります。
■解決策は?
VS2005には、構成マネージャというものがあります。ここでは、プラットフォームを選択できますが、通常は「Any CPU」となっています。これを、「x86」に変更すると強制的に32ビットアプリケーションとしてコンパイルできるようになります。
こうすることで、64ビット版.Net Framework上でも強制的に32ビットアプリケーションとして動作するようになります。WOW64のお世話にはなりますが、32ビットコンポーネントであるJV-Linkをハンドル出来るようになりました。
今回の件は、WOW64の制約、マネージドコードの64ビット/32ビットの自動切り替えによって、結構振り回されました。同じような経験をされている人もいるかもしれないので、備忘録として残しておきます。
トラックバック
このエントリーのトラックバックURL:
コメント
- Search
- 最近の記事
- カテゴリー
- 過去の記事
-
- 2011年07月
- 2011年06月
- 2011年05月
- 2011年03月
- 2011年02月
- 2011年01月
- 2010年12月
- 2010年11月
- 2010年10月
- 2010年09月
- 2010年08月
- 2010年07月
- 2010年06月
- 2010年05月
- 2010年04月
- 2010年03月
- 2010年02月
- 2010年01月
- 2009年12月
- 2009年11月
- 2009年10月
- 2009年09月
- 2009年08月
- 2009年07月
- 2009年06月
- 2009年05月
- 2009年04月
- 2009年03月
- 2009年02月
- 2009年01月
- 2008年12月
- 2008年11月
- 2008年10月
- 2008年09月
- 2008年08月
- 2008年07月
- 2008年06月
- 2008年05月
- 2008年04月
- 2008年03月
- 2008年02月
- 2008年01月
- 2007年12月
- 2007年11月
- 2007年10月
- 2007年09月
- 2007年08月
- 2007年07月
- 2007年06月
- 2007年05月
- 2007年04月
- 2007年03月
- 2007年02月
- 2007年01月
- 2006年12月
- 2006年11月
- 2006年10月
- 2006年09月
- 2006年08月
- 2006年07月
- 2006年06月
- 2006年05月
- 2006年04月
- 2006年03月
- 2006年02月
- 2006年01月
- 2005年12月
- 2005年11月
- 2005年10月
- 2005年09月
- 2005年08月
- 2005年07月
- 2005年06月
- 2005年05月
- 2005年04月
- 2005年03月
- 2005年02月
- 2005年01月
- 2004年12月
- 2004年11月
- 2004年10月
- 2004年09月
- All Entries
- Comments
-
- 円滑な人間関係を築く3つのコツ
為替和尚 (06/27)
- ネットメディアのすみわけ
えいじ (06/18)
吉田章太郎 (06/18)
- ドリーム競馬EX正式公開開始
いつも見てるけど (06/15)
吉田章太郎 (06/15)
- FlexGridコントロールの代わりにDataGridViewコントロールを
(06/15)
- 地震とストレージの関係
永ちゃん (03/18)
吉田章太郎 (03/19)
- 円滑な人間関係を築く3つのコツ
- TrackBacks
-
- Powered by