ページ 11

アドレスについての質問です。

Posted: 2009年1月26日(月) 18:12
by abc
windowsで6.0Cコンパイラーを使っています.
HANDLE hComm=::CreateFile(.....)でハンドルを取得し、
if((m_pThread = AfxBeginThread(Recv, &hComm, 0,0,0,NULL)) == NULL)でスレッド生成する.

Recv関数は UINT Recv(LPVOID hComm)で宣言されていています。
AfxBeginThread(Recv, &hComm, 0,0,0,NULL))をAfxBeginThread(Recv, (HANDLE*)hComm, 0,0,0,NULL))に
するとうまくいくのですが、&と(HANDLE*)でやった時の違いを教えてもらいたいです。

ちなみに(HANDLE*)でやるとうまくいきます。

自分の考えでは両方アドレスなので問題ないように思ったのですが&だとうまくいきませんでした。
文章がわかりずらいかもしれませんがよろしくお願いします。

Re:アドレスについての質問です。

Posted: 2009年1月26日(月) 19:11
by YuO
・&hCommを渡す
 →ローカルのオブジェクトへのポインタを渡しているので,hCommが定義された関数から抜け出した場合,Recv関数からは利用できなくなる
 →Recv関数中でのhCommの実際の型はHANDLE *型
・(HANDLE *)hCommを渡す
 →値を渡しているので,hCommが定義された関数から抜け出しても,Recv関数からは利用できる
 →Recv関数中でのhCommの実際の型はHANDLE

Re:アドレスについての質問です。

Posted: 2009年1月27日(火) 09:51
by abc
すいません解決しました。
結論から言うと、ハンドル=アドレスだったんですね><
実態と勘違いしていました。
YuOさんありがとうございました。