全國最多中醫師線上諮詢網站-台灣中醫網
發文 回覆 瀏覽次數:804
推到 Plurk!
推到 Facebook!

请指教有关函数地址的问题???

尚未結案
chenpeng20000
一般會員


發表:22
回覆:32
積分:10
註冊:2003-09-17

發送簡訊給我
#1 引用回覆 回覆 發表時間:2004-02-20 19:34:07 IP:211.64.xxx.xxx 未訂閱
以前的程序: bool CALLBACK BeginCapture(HANDLE hBoard); bool CALLBACK BackDisplay(HANDLE hBoard, long No); bool CALLBACK EndCapture(HANDLE hBoard); 调用时:SeqCallback(hBoard,BeginCapture,BackDisplay,EndCapture); 现我将 BeginCapture(HANDLE hBoard); BackDisplay(HANDLE hBoard, long No); EndCapture(HANDLE hBoard); 写在一个类AAA中;那么我的调用函数SeqCallback应该怎样写? 努力学习 發表人 - chenpeng20000 於 2004/02/20 19:55:09
------
努力学习
pental
初階會員


發表:3
回覆:48
積分:30
註冊:2003-09-21

發送簡訊給我
#2 引用回覆 回覆 發表時間:2004-03-01 09:31:46 IP:211.21.xxx.xxx 未訂閱
我想在你寫的這個類別中不能繼承 VCl 中的類別,不然你的類別中的 Method 的型態會跟你的 callback 函式不相容!假設你的類別名稱是 MyClass 的話,那你調用 SeqCallback 可以寫成 SeqCallback(MyClass.BeginCapture,MyClass.BackDisplay,EndCapture); 參考一下!
anpino
版主


發表:31
回覆:477
積分:231
註冊:2003-01-02

發送簡訊給我
#3 引用回覆 回覆 發表時間:2004-03-01 12:03:10 IP:61.66.xxx.xxx 未訂閱
您好,callback方式如下:    
    // 定義    class AAA
{
public:
    void CALLBACK BeginCapture(HANDLE hBoard);
};
void SeqCallback(void (CALLBACK AAA::* BeginCaptureCallBack)(HANDLE hBoard));    // 叫用    void __fastcall TForm1::Button1Click(TObject *Sender)
{
        AAA atest;
        SeqCallback(atest.BeginCapture);
}
------------------------------- 數學系是內功很強(邏輯/分析) 資工系是招式很多(程式技巧) 就像令狐沖VS東方不敗:D Programmers Guide http://anpino.begin.8d8d.com 發表人 - anpino 於 2004/03/01 12:50:00
chenpeng20000
一般會員


發表:22
回覆:32
積分:10
註冊:2003-09-17

發送簡訊給我
#4 引用回覆 回覆 發表時間:2004-03-02 11:12:26 IP:211.64.xxx.xxx 未訂閱
谢谢两位回复。 我这里的BeginCapture(HANDLE hBoard);BackDisplay(HANDLE hBoard, long No);EndCapture(HANDLE hBoard);都是厂家提供的函数形式。还有SeqCallback的定义是在库文件中,不能改的。 我的意思是想在BeginCapture;BackDisplay;EndCapture中能够访问到一个类AAA中的属性 努力学习
------
努力学习
anpino
版主


發表:31
回覆:477
積分:231
註冊:2003-01-02

發送簡訊給我
#5 引用回覆 回覆 發表時間:2004-03-02 13:11:11 IP:61.66.xxx.xxx 未訂閱
引言: 谢谢两位回复。 我这里的BeginCapture(HANDLE hBoard);BackDisplay(HANDLE hBoard, long No);EndCapture(HANDLE hBoard);都是厂家提供的函数形式
那就是SDK內DLL的函式囉~~ 那麼要將這3個函式寫入類AAA中便不可行。
引言: 。还有SeqCallback的定义是在库文件中,不能改的。 我的意思是想在BeginCapture;BackDisplay;EndCapture中能够访问到一个类AAA中的属性
不是很清楚您的意思, 在DLL內的函式是無法更改的。 可以具體說明您要的效果嗎? ------------------------------- 數學系是內功很強(邏輯/分析) 資工系是招式很多(程式技巧) 就像令狐沖VS東方不敗:D Programmers Guide http://anpino.begin.8d8d.com
anpino
版主


發表:31
回覆:477
積分:231
註冊:2003-01-02

發送簡訊給我
#6 引用回覆 回覆 發表時間:2004-03-02 13:20:19 IP:61.66.xxx.xxx 未訂閱
我猜想您要的或許是這樣:    
class AAA
{
public:
  int test;
};    AAA testA;
bool CALLBACK BeginCapture(HANDLE hBoard)
{
    testA.test; //這裡可直接叫用AAA的public屬性。
}
------------------------------- 數學系是內功很強(邏輯/分析) 資工系是招式很多(程式技巧) 就像令狐沖VS東方不敗:D Programmers Guide http://anpino.begin.8d8d.com
chenpeng20000
一般會員


發表:22
回覆:32
積分:10
註冊:2003-09-17

發送簡訊給我
#7 引用回覆 回覆 發表時間:2004-03-02 16:47:40 IP:211.64.xxx.xxx 未訂閱
我说的确实有些糊涂,其实我所问的一切都是有关ocx控件的制作。 下面就是我所遇到的具体问题了。 new一个activex form, "ActiveFormImpl1.h"中 class TActiveFormX : public TActiveForm { __published: TPanel *Panel1; void __fastcall ActiveFormCreate(TObject *Sender); private: // User declarations public: // User declarations //略 } ActiveFormImpl1.cpp中 TActiveFormX *ActiveFormX1; BOOL CALLBACK BeginCapture(HANDLE hBoard) { ActiveFormX1->Panel1->Visible=false;//***这里出问题*** return 1; } 1.我搞不清ActiveFormX1和m_VclCtl的关系。 2.当写下ActiveFormX1->Panel1->Visible=false编译此控件,没有错误。我又新建一个应用,调用此控件时调用组件的一个方法(用到了BeginCapture函数)时,在***处出现问题,Panel1去不到值。因此我想把BeginCapture,BackDisplay,EndCapture这三个函数写在TActiveFormX类中,不知道我的这个想法是不是很奇怪? 努力学习
------
努力学习
anpino
版主


發表:31
回覆:477
積分:231
註冊:2003-01-02

發送簡訊給我
#8 引用回覆 回覆 發表時間:2004-03-02 17:32:26 IP:61.66.xxx.xxx 未訂閱
panel1找不到的原因很可能是panel物件並沒有被產生出來。
ActiveFormImpl1.cpp中
TActiveFormX *ActiveFormX1  = NULL; //先初使化
BOOL CALLBACK BeginCapture(HANDLE hBoard)
{
   if((ActiveFormX1 != NULL)&&(ActiveFormX1->Panel1 != NULL)) // 要確定ActiveFormX1以及其panel 2個物件都存在
   {
       ActiveFormX1->Panel1->Visible=false;
       return 1;
   }
   return 0;
}
外部dll已經寫入的函式並不能夠函入一個dll以外的class, 所以那3個callback函式無法嵌進您自訂的class裡。 ------------------------------- 數學系是內功很強(邏輯/分析) 資工系是招式很多(程式技巧) 就像令狐沖VS東方不敗:D Programmers Guide http://anpino.begin.8d8d.com 發表人 - anpino 於 2004/03/02 17:34:22
chenpeng20000
一般會員


發表:22
回覆:32
積分:10
註冊:2003-09-17

發送簡訊給我
#9 引用回覆 回覆 發表時間:2004-03-03 09:36:20 IP:211.64.xxx.xxx 未訂閱
非常感谢您的教导! 但是我的Panel是拖动到窗体上的,所以我想应该有值的。 努力学习
------
努力学习
anpino
版主


發表:31
回覆:477
積分:231
註冊:2003-01-02

發送簡訊給我
#10 引用回覆 回覆 發表時間:2004-03-04 08:23:13 IP:61.66.xxx.xxx 未訂閱
引言: 非常感谢您的教导! 但是我的Panel是拖动到窗体上的,所以我想应该有值的。 應該? 還是確定一下吧... 如果>>>>> 努力学习 < face="Verdana, Arial, Helvetica"> ------------------------------- 數學系是內功很強(邏輯/分析) 資工系是招式很多(程式技巧) 就像令狐沖VS東方不敗:D Programmers Guide http://anpino.begin.8d8d.com
系統時間:2024-05-18 13:48:51
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!