- - PR -
VB.NETでのウィンドウハンドル取得時のinteger値について
1
投稿者 | 投稿内容 | ||||
---|---|---|---|---|---|
|
投稿日時: 2005-06-30 16:08
こんにちは。すみませんがご指導ください。
現在、VB.NETで開発しておりますが、 ウィンドウハンドルを取得してintegerで渡す箇所があります。 以下のようにコーディングする場合、 Me.Handle.ToInt32と、Me.Handle.ToInt64 どちらで渡すのが正しいのでしょうか。 intReturn = AdrSerch(Me.Handle.ToInt32, stcAdrSet) または intReturn = AdrSerch(Me.Handle.ToInt64, stcAdrSet) ご指導よろしくお願いいたします。 開発環境 WindowsXP Professional SP2 VB.NET | ||||
|
投稿日時: 2005-06-30 16:29
VB.NETのIntegerはSystem.Int32のエイリアス、別名です。
メソッドの引数としてIntegerが要求されているなら当然Integer、つまりInt32で渡さなければなりません。 余談: プラットフォームが64bitであるものはSystem.IntPtrは64ビット=8バイト、つまりLong(=System.Int64)の値になります。 ですからこの場合Int32で表現すると正しいポインタ/ハンドルを指せなくなります。 今後の移植性を考えれば、System.IntPtrで済ませられるのならそのままIntPtrで扱うのがベターです。 | ||||
|
投稿日時: 2005-07-01 09:34
かならず、IntPtr を使うようにしましょう。 それ以上でもそれ以下でもないです。 _________________ C# と VB.NET の入門サイト じゃんぬねっと日誌 | ||||
|
投稿日時: 2005-07-01 11:05
Hongliangさん、じゃんぬねっとさん、アドバイスありがとうございます。
引用: -------------------------------------------------------------------------------- かならず、IntPtr を使うようにしましょう。 それ以上でもそれ以下でもないです。 -------------------------------------------------------------------------------- じゃんぬねっとさん、大変恐縮なのですが IntPtrを使う場合、 intReturn = AdrSerch(Me.Handle.ToInt32, stcAdrSet) をどのように修正したらよいのでしょうか。 自分で試してみたのですがコンパイルが通りませんでした。 すみませんがご指導お願いいたします。 | ||||
|
投稿日時: 2005-07-01 11:17
メソッドを呼び出す側ではなく、Handleを受け取るメソッド側の問題です。
そちらのほうの手直しが可能なら仮引数の型をIntPtrにすればいいわけです。 更にそのメソッドの中での使われ方にも考慮が必要でしょう。 もしDeclare文で使っているのなら、宣言をIntegerの代わりにIntPtrにするだけです。 ですから呼び出されるメソッドに手を付けられないのなら、要求される型に従ってToInt??を行います。 //IntPtrで済めばいいのですけど、Win32APIの中にもポインタと数値を同じように扱うものなんか山ほどありますからねー。 |
1