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:アドレスについての質問です。
・&hCommを渡す
→ローカルのオブジェクトへのポインタを渡しているので,hCommが定義された関数から抜け出した場合,Recv関数からは利用できなくなる
→Recv関数中でのhCommの実際の型はHANDLE *型
・(HANDLE *)hCommを渡す
→値を渡しているので,hCommが定義された関数から抜け出しても,Recv関数からは利用できる
→Recv関数中でのhCommの実際の型はHANDLE
→ローカルのオブジェクトへのポインタを渡しているので,hCommが定義された関数から抜け出した場合,Recv関数からは利用できなくなる
→Recv関数中でのhCommの実際の型はHANDLE *型
・(HANDLE *)hCommを渡す
→値を渡しているので,hCommが定義された関数から抜け出しても,Recv関数からは利用できる
→Recv関数中でのhCommの実際の型はHANDLE
Re:アドレスについての質問です。
すいません解決しました。
結論から言うと、ハンドル=アドレスだったんですね><
実態と勘違いしていました。
YuOさんありがとうございました。
結論から言うと、ハンドル=アドレスだったんですね><
実態と勘違いしていました。
YuOさんありがとうございました。