64ビット時代

すぐそこまで来ているような気がしてきたので、拙作のライブラリィを64bit環境に移行することを考えてみた。といってもマネジドコードは心配しても仕方が無いので気をつけるべく部分はなんといってもプラットホーム呼び出し(P/Invoke)とCOM相互運用だろう。

32 ビット マネージ コードを 64 ビットに移行する(MSDN)によると、P/Invokeに関しては最低でも

public extern static int EnumWindows(EnumWindowsProc lpEnumFunc, int lParam);

このようなP/Invokeの記述は、int(へのポインタ)に互換性が無くなるので

public extern static int EnumWindows(EnumWindowsProc lpEnumFunc, IntPtr lParam);

このように書いておくと、64ビットプラットホームになっても正しく動作するのだそうだ。引数が本当にintを必要とするか、IntPtr(UIntPtr)を必要とするかは一見では解らないので、まずはAPIリファレンスを引く必要がありそうだな。

そんな時はここ -> PINVOKE.NET IntPtr(UIntPtr)が必要なAPIはしっかりと記述されている。この手のサイトでは最も役に立つ部類のサイト。本当にお世話になってるし寄付を受付けているのであれば何時でもいたします。

COM相互運用に関してはリンクドキュメントを読んでも正直よく解らなかった。現物合わせとかになってしまうのかな。