Re: [問題] 一般指標轉函數指標

看板C_and_CPP作者 (累人啊....)時間16年前 (2009/12/30 13:27), 編輯推噓7(7010)
留言17則, 6人參與, 最新討論串2/3 (看更多)
: → holymars:那就強制轉型就好了.. 12/30 13:12 : → holymars:Thread( (void(*)())OB.funptr ); 12/30 13:14 貼一下部份的程式碼,再簡化一下.. class ActTB{ public: int ActID; int ProcedureID; void* ProcedureAdr; }; array<Thread^>^ ThreadMove=gcnew array<Thread^>(10); ActTB ActTable; ActTable.ActID=1; ActTable.ProcedureAdr=&fun1; void(*a)()=((void(*)())ActTable.ProcedureAdr); ThreadMove[0]=gcnew Thread(gcnew ThreadStart(ActTable.ProcedureAdr) ); ThreadMove[0]=gcnew Thread(gcnew ThreadStart( ( (void(*)() )ActTable.ProcedureAdr) ) ); ThreadMove[0]=gcnew Thread(gcnew ThreadStart( a )); 第一個,沒轉型前,有錯,錯誤訊息如下 error C3364: 'System::Threading::ThreadStart' : 對委派建構函式無效的引數,委派目標必須是指向成員函式的指標 第二個,轉型後,結果是同樣的錯誤訊息 第三個,有錯,但錯誤訊息不太一樣,如下 error C3352: 'void (__cdecl *__cdecl a)(void)' : 指定的函式不符合委派型別 'void (void)' 感覺第二三個應該可以才對,也不知道為什麼錯@@ -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 163.18.48.28 ※ 編輯: tyc5116 來自: 163.18.48.28 (12/30 13:29)

12/30 13:57, , 1F
沒記錯的話, ThreadStart(void(*)()); 是 C# 的 prototype
12/30 13:57, 1F

12/30 13:59, , 2F
C 的可能要用類似 function obj 的那一個
12/30 13:59, 2F

12/30 14:01, , 3F
ThreadStart是個delegate 我不是很清楚微軟怎麼實作的..
12/30 14:01, 3F

12/30 14:02, , 4F
但是看來直接把function pointer套進delegate會有問題
12/30 14:02, 4F

12/30 14:15, , 5F
我對C++/CLI研究不深 :( 也許Google一下看ThreadStart
12/30 14:15, 5F

12/30 14:15, , 6F
的constructor到底能不能吃pointer..
12/30 14:15, 6F

12/30 16:00, , 7F
fun1是某個class的member function嗎?
12/30 16:00, 7F

12/30 17:03, , 8F
不是~
12/30 17:03, 8F

12/30 17:12, , 9F
ThreadStart的引數要class的member function才行喔
12/30 17:12, 9F

12/30 17:16, , 10F
寫個class,讓一個成員函式去呼叫fun1 把這個函式當參數
12/30 17:16, 10F

12/30 17:17, , 11F
丟給ThreadStart試試看
12/30 17:17, 11F

12/30 18:29, , 12F
不是很懂...
12/30 18:29, 12F

12/30 22:21, , 13F
class DummyThreadProc
12/30 22:21, 13F

12/30 22:21, , 14F
{ public static void DoProc { fun1(); } };
12/30 22:21, 14F

12/30 22:21, , 15F
ThreadMove[0]=gcnew Thread (
12/30 22:21, 15F

12/30 22:21, , 16F
gcnew ThreadStart(DummyThreadProc.DoProc));
12/30 22:21, 16F

12/30 22:24, , 17F
建議原PO好好翻翻書 一直瞎寫 未來問題會很多
12/30 22:24, 17F
文章代碼(AID): #1BEkJJmU (C_and_CPP)
文章代碼(AID): #1BEkJJmU (C_and_CPP)