[問題] *handle的用法?

看板C_and_CPP作者 (^^)時間9年前 (2014/08/14 00:03), 9年前編輯推噓7(7012)
留言19則, 5人參與, 最新討論串1/2 (看更多)
小弟是C++剛入門的新手,最近在研究一個呼叫DLL的程式, 爬了文也google過,想了很久但還是有些地方不太了解。 希望各位大大給點意見. 程式碼: typedef void *DEV_HANDLE; //line 1 DEV_HANDLE WINAPI Device_xOpen(const int nDevIndex); //line 2 typedef DEV_HANDLE (WINAPI *LP_DevOpen)(const int nDevIndex, const char *pDevName); // line 3 DEV_HANDLE m_hLink; // line 4 LP_DevOpen m_Open; // line 5 m_Open = (LP_DevOpen)::GetProcAddress(hDLL, "Device_xOpen"); // line 6 m_hLink = m_Open(0, ""); // line 7 if (m_hLink){ ......} // line 8 疑問: 1. DEV_HANDEL為指標型式,所以 line 2 的意思是函式Device_xOpen的回傳值 是一個位址嗎? 2. 如果"函式Device_xOpen的回傳值是一個位址", 那為何line 7, line 8 看起來 m_hLink 是一個值? 3. Device_xOpen函式的輸入值只有一個nDevIndex, 經過了line 3, line 6可以多出一個pDevName的原因是? pDevName在原本的Device_xOpen沒有,它代表的是甚麼呢? 4. 雙冒號::是用在表示Class裡的函式或是變數, 但line 6 中的(LP_DevOpen)::GetProcAddress雙冒號的用意是? 5. 雙冒號::另一問,程式碼: HINSTANCE hInst = ::LoadLibrary ( “HIDKey.dll” ); 這裡的雙冒號的用意是? C++真的比想像中的還有學問 >_< -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 111.250.184.78 ※ 文章網址: http://www.ptt.cc/bbs/C_and_CPP/M.1407945828.A.E14.html

08/14 00:07, , 1F
4 5 的 :: 同義, 指不在任何 class/namespace 裡的名字
08/14 00:07, 1F

08/14 00:08, , 2F
4 前面的 () 只是把函式結果轉型而已
08/14 00:08, 2F

08/14 00:08, , 3F
:: 前面沒東西表示 global
08/14 00:08, 3F

08/14 00:09, , 4F
1 2 可參看我的文章 #1I6t3pwd
08/14 00:09, 4F
※ 編輯: sv39933993 (111.250.184.78), 08/14/2014 00:16:40

08/14 00:21, , 5F
"指不在任何 class/namespace 裡的名字"的意思是甚麼?
08/14 00:21, 5F

08/14 00:24, , 6F
Bencrie大大 global是::後面的東西是global嗎?
08/14 00:24, 6F

08/14 02:01, , 7F
精確的說是 anonymous namespace
08/14 02:01, 7F

08/14 05:46, , 8F
不是 anonymous namespace, 是 global namespace
08/14 05:46, 8F

08/14 05:46, , 9F
anonymous namespace 裡的東西只能直接用名字
08/14 05:46, 9F

08/14 05:47, , 10F
(要換一講法叫做 unnamed namespace 也行)
08/14 05:47, 10F

08/14 10:11, , 11F
感謝keeper7478, LPH66大大的回答,我消化一下@@
08/14 10:11, 11F

08/14 10:16, , 12F
::GetProcAddress雙冒號指的GetProc是global namespac
08/14 10:16, 12F

08/14 10:18, , 13F
而不在任何Class/namespace裡宣告的名字是嗎?
08/14 10:18, 13F

08/14 14:49, , 14F
我講的「不在任何 class/namespace 裡」就是 global
08/14 14:49, 14F

08/14 14:50, , 15F
一個 :: 前面沒有名字就是代表這樣的意義
08/14 14:50, 15F

08/14 15:44, , 16F
其實可以改成寫 C,反正全部都 Win32 SDK 的東西 XD
08/14 15:44, 16F

08/14 22:47, , 17F
to原po:LPH66講的才是對的,我搞錯了,我不曉得原來
08/14 22:47, 17F

08/14 22:47, , 18F
還有global namespace 這東西 XD
08/14 22:47, 18F

08/16 22:09, , 19F
win_api的命名方式真的銷魂 T_T
08/16 22:09, 19F
文章代碼(AID): #1JwunauK (C_and_CPP)
討論串 (同標題文章)
文章代碼(AID): #1JwunauK (C_and_CPP)