- PR -

VB.NETでのウィンドウハンドル取得時のinteger値について

1
投稿者投稿内容
seberg
常連さん
会議室デビュー日: 2005/03/03
投稿数: 28
投稿日時: 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
Hongliang
ぬし
会議室デビュー日: 2004/12/25
投稿数: 576
投稿日時: 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で扱うのがベターです。
じゃんぬねっと
ぬし
会議室デビュー日: 2004/12/22
投稿数: 7811
お住まい・勤務地: 愛知県名古屋市
投稿日時: 2005-07-01 09:34
引用:

Me.Handle.ToInt32と、Me.Handle.ToInt64
どちらで渡すのが正しいのでしょうか。


かならず、IntPtr を使うようにしましょう。
それ以上でもそれ以下でもないです。



_________________
C# と VB.NET の入門サイト
じゃんぬねっと日誌
seberg
常連さん
会議室デビュー日: 2005/03/03
投稿数: 28
投稿日時: 2005-07-01 11:05
Hongliangさん、じゃんぬねっとさん、アドバイスありがとうございます。

引用:
--------------------------------------------------------------------------------


かならず、IntPtr を使うようにしましょう。
それ以上でもそれ以下でもないです。

--------------------------------------------------------------------------------

じゃんぬねっとさん、大変恐縮なのですが
IntPtrを使う場合、
intReturn = AdrSerch(Me.Handle.ToInt32, stcAdrSet)
をどのように修正したらよいのでしょうか。
自分で試してみたのですがコンパイルが通りませんでした。
すみませんがご指導お願いいたします。


Hongliang
ぬし
会議室デビュー日: 2004/12/25
投稿数: 576
投稿日時: 2005-07-01 11:17
メソッドを呼び出す側ではなく、Handleを受け取るメソッド側の問題です。
そちらのほうの手直しが可能なら仮引数の型をIntPtrにすればいいわけです。
更にそのメソッドの中での使われ方にも考慮が必要でしょう。
もしDeclare文で使っているのなら、宣言をIntegerの代わりにIntPtrにするだけです。

ですから呼び出されるメソッドに手を付けられないのなら、要求される型に従ってToInt??を行います。

//IntPtrで済めばいいのですけど、Win32APIの中にもポインタと数値を同じように扱うものなんか山ほどありますからねー。
1

スキルアップ/キャリアアップ(JOB@IT)