Windows10+VisualStudio2015でIMEを作成(5)

64ビット版WINDOWSにおけるIME用DLLの取り扱いと、ビルド、モジュール定義ファイルの設定

 

 

  

このページの情報は、私のパソコン利用環境で、少なくとも1度は実行などしたものを記載していますが、

このページの情報を利用して損害などが生じても、私(このWEBページの作成者、programtips)は一切責任は負いません。

脅すわけではないですが、IME作成(というより作成したIMEを利用するために)はWindowsのレジストリを変更する必要もあり、

パソコンが動作不安定になったり、動かなくなったりする可能性が通常より高い点にはご注意ください。

エミューレーターや、OSのリカバリが問題ないパソコンが用意できれば、安全と思います。

もっとも、私もほかの用途などでも使っているパソコンを利用していますけれども。

またVisualStudio2015のインストールされた64ビット版Windows10パソコンを前提にしています。

 

1.64ビット版WINDOWSにおける32ビット版アプリケーション

64ビット版WINDOWSで、32ビット版アプリケーションは、

WOW64という32ビット版のエミュレータで実行されているそうです。

64ビット版WINDOWSにおいて、

デスクトップ画面の上では、32ビット版のアプリケーションも、64ビット版のアプリケーションも同じように動いているように見えますが、、

実際には、その内部での動作はかなり異なっているそうです。

 

以下MSDNのページ

64 ビット Windows プログラミング ガイド

32 ビット アプリケーションの実行

 

また、このエミュレータとの関係で、

64ビット版WINDOWSで32ビット版アプリケーションがレジストリやシステムディレクトリにアクセスしようとする場合、

32ビット版WINDOWSでの32ビット版アプリケーションの動作とは、

異なる場所にアクセスすることになる場合もあるようです。

 
以下MSDNのページ

レジストリ リダイレクタ

ファイル システム リダイレクタ

 

そのほかにも、32ビットアプリケーションの実行には、

64ビットとの違いがいろいろあるようです。

 

 

2.64ビット版WINDOWSにおけるDLL

そして32 ビット アプリケーションの実行のページにあるように、

64ビットプロセスは、32ビットのDLLを読み込んで実行することができず、

また、32ビットプロセスは64ビットのDLLを読み込んで実行することができないとのことです。

(ただしデータファイルのDLL、イメージリソースのDLLは読み込めるとのことです。

上記 32 ビット アプリケーションの実行 による)

 

そのため、64ビットプロセス、32ビットプロセスの両方でDLLを利用するためには、

DLLも、64ビット版と、32ビット版が必要になります。

 

本来正しいやり方かかはわかりませんが、

64ビット版と、32ビット版の切り替えは、

VISUAL STUDIO2015の上部中央あたりの

上図、x64とかx86とか表示されるソリューションプラットフォームのところを切り替えることで、

64ビット版と32ビット版が切り替えられると思います。

x64 → 64ビット版

x86 → 32ビット版

  

したがってこれを切り替えれば、両方作れるのですが、

IMEの登録などregsvr32を利用しようとした場合、

どうもモジュール定義ファイルも使わないとうまくいかないようなので、

モジュール定義ファイルも設定しておきます。

ソリューションエクスプローラで、

プロジェクト(ソリューションではない)を右クリっリックしてプロパティを選択し、プロパティを表示させ

「リンカー」→「入力」のモジュール定義ファイルで、モジュール定義ファイルを設定します。

このとき、画面上の構成(Release版か、Debug版か)やプラットフォーム(64ビット版か、32ビット版か)が、希望と一致しているかどうかも確認します。

64ビット版と、32ビット版両方作るなら、モジュール定義ファイルも両方で有効になるように設定する必要があります。

 

これらを設定してビルドすれば、

64ビット版、32ビット版両方のDLLを作成できるはずです。

 

3.64ビット版WINDOWSにおけるIMEのDLL

では、IMEのDLLの場合ですが、下記のページよると、

IMEの本体のCLSIDを同じにして、あとは別々にregsvr32やTSFのレジストリ登録用の関数で登録すれば、

それらは、ユーザーから一つのIMEのように見えるそうです。

 

64-Bit Considerations

 

本体以外のGUIDなどが一致しているかべきか、別であるべきかなどはわからないです。

 

また、64ビットのアプリケーションに対して、32ビットのIMEのDLLだけで、対になる64ビットのDLLが無い場合、

IMEはダイアローグも、メッセージも何も出さすに失敗するとのことです。

 

インストールは、32ビット版は、SysWOW64 ディレクトリに、64ビット版は、System32 ディレクトリにあるいはこれらのサブディレクトリ(ただし例外あり)に行うとのことです。

間違えないようにしないといけないのは、

32ビット版は、SysWOW64 ディレクトリに、

64ビット版は、System32 ディレクトリにということですね。

そのほかにも、インストールのパスを、直接指定ではなく、

システムのシステムファイルの設定を利用すべきことや、

Windows¥IMEのディレクトリにインストールすべきでないことなどが書かれています。

 

ただ、インストールディレクトリについて、上記のMSDNのページの記載を守らなくても、

IMEを起動させることはできるように思います。

もっとも、IMEがほかのファイルを利用したりする場合には、

上記の32ビット版のアクセスする先を切り替えるエミュレータの機能などとの関係で、

まずいことが起きる場合があるように思います。

 

 

 

トップページに戻る

 

ご意見、ご質問などは下記掲示板にお願いします。

 掲示板

作成2016/09/11

(c)2016  programtips

inserted by FC2 system