一個關於函數指標的問題? |
尚未結案
|
jjscsig2
一般會員 ![]() ![]() 發表:1 回覆:2 積分:0 註冊:2009-08-03 發送簡訊給我 |
大家好,小弟在寫程式的時候遇到一個很奇怪的問題
我有一個標準 WIN API Function I16 PASCAL Set_Callback (U16 PortNo, void ( __stdcall *CallBackProc)(U32 Bufferaddress ,U16 PortNo)); 我宣告了一個Class class Test { void __stdcall InSideCallBack(U32 BufferAddress ,U16 PortNo); void Set_Call_Back(void); }; void Test::Set_Call_Back(void) { Set_Callback(PortNo,InSideCallBack); }; 編譯時會出現下列錯誤訊息 E2034 Cannot convert 'void (__stdcall * (_closure )(unsigned long,unsigned short))(unsigned long,unsigned short)' to 'void (__stdcall *)(unsigned long,unsigned short)' 為何編譯程式會將我原 InSideCallBack 函數修改 如何可以使 Test class 不會自行加入 _closure 宣告.... 或是如何強制轉型呼叫傳遞.. 請問各位高手大大有沒有辦法解決這個問題?Q_Q
------
jjs |
ikk
尊榮會員 ![]() ![]() ![]() ![]() ![]() ![]() 發表:4 回覆:413 積分:768 註冊:2003-06-30 發送簡訊給我 |
|
jjscsig2
一般會員 ![]() ![]() 發表:1 回覆:2 積分:0 註冊:2009-08-03 發送簡訊給我 |
謝謝ikk 大大的回覆
問題是解決了,但卻產生另一個問題 如果 class Test 改為如下 class Test { bool Flag; static void __stdcall InSideCallBack(U32 BufferAddress ,U16 PortNo); void Set_Call_Back(void); } void __stdcall InSideCallBack(U32 BufferAddress ,U16 PortNo) { Flag = true; }; 編譯時會出現下列錯誤訊息: Flag cannot used without an object
------
jjs |
ikk
尊榮會員 ![]() ![]() ![]() ![]() ![]() ![]() 發表:4 回覆:413 積分:768 註冊:2003-06-30 發送簡訊給我 |
[code cpp] class Test; Test * pTest; class Test { Test(){pTest=this;}; public: bool Flag; static void __stdcall InSideCallBack(U32 BufferAddress ,U16 PortNo); void Set_Call_Back(void); }; void __stdcall InSideCallBack(U32 BufferAddress ,U16 PortNo) { pTest->Flag = true; }; [/code]
------
FPGA驗證, FPGA開發平台, http://smims.com |
jjscsig2
一般會員 ![]() ![]() 發表:1 回覆:2 積分:0 註冊:2009-08-03 發送簡訊給我 |
===================引 用 ikk 文 章=================== [code cpp] class Test; Test * pTest; class Test { Test(){pTest=this;}; public: bool Flag; static void __stdcall InSideCallBack(U32 BufferAddress ,U16 PortNo); void Set_Call_Back(void); }; void __stdcall InSideCallBack(U32 BufferAddress ,U16 PortNo) { pTest->Flag = true; }; [/code] 如果Test 物件有n個 Test * pTest1,* pTest2,*PTest3; Fun無法如此呼叫?? void __stdcall Test::InSideCallBack(U32 BufferAddress ,U16 PortNo) { pTest1->Flag = true; //pTest2->Flag = true; //pTest3->Flag = true; };
------
jjs |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |