読者です 読者をやめる 読者になる 読者になる

コピペの罠 / HWND は Integer ではない

.NET

@IT 連載:VB 6ユーザーのためのこれならマスターできるVB 2005超入門 』より.

どのようなWin32 APIが利用できるかは、以前のMSDNライブラリの「Win32およびCOM開発」から見ることができる。また、すべてのWin32 APIの宣言がテキスト・ファイルにまとめられており、KB178020からダウンロードできる。ただし、この内容はVB 5用であるため、データ型などの書き換えが必要になる。また、情報が古いので、掲載されていないWin32 APIもあることに注意。

ダウンロードしたファイルはテキスト・ファイルを「Program Files\Ork97\Document\vba」というフォルダに自動的にインストールするプログラムとなっている。プログラムを実行すると、そのフォルダの下に「Win32API.txt」というテキスト・ファイルが作られるので、その中から必要な宣言を探し出して、コピー&ペーストすればよい。

Win32 APIの宣言方法は一般的な関数とほぼ同じだが、Libの後に、そのAPIが含まれるライブラリ・ファイル名を指定する。また、実際のAPIの名前とは異なる関数名を付けたい場合には、「Alias」に続けて実際のAPIの名前を指定するとよい。

先ほども述べたように、VB 2005でこれらの宣言を利用するには、引数や戻り値のデータ型を変更する必要がある。VB 6以前のLong型はVB 2005ではInteger型になっているので、古い宣言の中に書かれている「Long」はすべて「Integer」に書き直す必要がある。上記のリストはすでに書き直したものである

Visual Basic 5 や 6 なら 64-bit で動くことはありえないため,害はないと言えるのですが,Visual Basic 2005 の場合はちょっと問題,と.IntPtr とすべきところを Integer と書いてると,そのうち嵌りそうです.2 年後ぐらい?
Win32API.txt 自体,コピペして便利に使ってもらうために存在しているものでしょうし,コピペ自体が悪とは言いませんが,この場合 Visual Basic 5/6 と Visual Basic 2005 の文法が似すぎているのがあだになっているんでしょうかね.

問題

次について考えてみよう.

  1. 正常に動作する Visual Basic 2005 のアプリケーションがある
  2. 販売店で Windows 7 (仮称) を購入する
  3. 自宅に持ち帰ってインストールする
  4. アプリケーションがクラッシュする

悪いのは誰か.ヒント: アプリケーションのプログラマではない



Windowsプログラミングの極意 歴史から学ぶ実践的Windowsプログラミング!

Windowsプログラミングの極意 歴史から学ぶ実践的Windowsプログラミング!