線上訂房服務-台灣趴趴狗聯合訂房中心
發文 回覆 瀏覽次數:1765
推到 Plurk!
推到 Facebook!

一個關於函數指標的問題?

尚未結案
jjscsig2
一般會員


發表:1
回覆:2
積分:0
註冊:2009-08-03

發送簡訊給我
#1 引用回覆 回覆 發表時間:2009-08-03 17:01:06 IP:114.137.xxx.xxx 訂閱
大家好,小弟在寫程式的時候遇到一個很奇怪的問題
我有一個標準 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

發送簡訊給我
#2 引用回覆 回覆 發表時間:2009-08-12 10:25:43 IP:163.28.xxx.xxx 訂閱
class Test
{
static void __stdcall InSideCallBack(U32 BufferAddress ,U16 PortNo);
void Set_Call_Back(void);
};

void Test::Set_Call_Back(void)
{
Set_Callback(PortNo,InSideCallBack);
};
------
FPGA驗證, FPGA開發平台, http://smims.com
jjscsig2
一般會員


發表:1
回覆:2
積分:0
註冊:2009-08-03

發送簡訊給我
#3 引用回覆 回覆 發表時間:2009-08-13 15:45:27 IP:122.116.xxx.xxx 訂閱
謝謝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

發送簡訊給我
#4 引用回覆 回覆 發表時間:2009-08-13 16:07:08 IP:163.28.xxx.xxx 訂閱

[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

發送簡訊給我
#5 引用回覆 回覆 發表時間:2009-08-14 19:23:09 IP:61.62.xxx.xxx 訂閱

===================引 用 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
系統時間:2017-10-21 5:47:57
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!