我以前經常考慮使用WNDCLASS、CreateThread之類的Windows API時如何在類里面調用,傳入函數參數地址時如何使用成員函數的地址。為了研究,寫了一個示例代碼:
成都創新互聯從2013年創立,先為婁星等服務建站,婁星等地企業,進行企業商務咨詢服務。為婁星企業網站制作PC+手機+微官網三網同步一站式服務解決您的所有建站問題。#include <iostream> #include <stdio.h> using namespace std; typedef int (__stdcall *XSSH_SAY_HELLO)(int); class XTestMethod { typedef int (__stdcall XTestMethod::*XSayHello)(int); public: XSayHello say; int hi; public: XTestMethod(); virtual ~XTestMethod(); int sayhello(int arg); }; XTestMethod::XTestMethod() { say=&XTestMethod::sayhello; hi=1000; } XTestMethod::~XTestMethod() { } int XTestMethod::sayhello(int arg) { printf(" say:%d%d ",arg,this->hi); } int main(int argc, char *argv[]) { XTestMethod t; XSSH_SAY_HELLO call=*(XSSH_SAY_HELLO*)&t.say; call(0); system("pause"); return 0; }調試的時候發現在調用類的成員之前堆棧里的this指針是空的,輸入之后輸出結果的值前者是隨機的,后者直接訪問出錯(空引用)。
對于成員函數與成員變量而言,同一類型的不同對象的同一成員變量的偏移地址是相同的,訪問成員變量時它們的地址是基于對象的地址疊加計算的,如果用上述方法進入成員函數進而方問成員變量,那么訪問出錯。就算在訪問成員變量之前把對象指針壓入堆棧,不僅要考慮壓入哪個對象的地址,而且這樣使用成員函數實際上把它當成了全局函數來用,與靜態成員函數使用在使用目的上沒有區別,失去了面象對象的意義。
當前文章:我的一點關于把WndProc指向類的成員函數的看法-創新互聯
URL分享:http://vcdvsql.cn/article2/cdipic.html
成都網站建設公司_創新互聯,為您提供搜索引擎優化、App開發、品牌網站制作、ChatGPT、網站內鏈、網站排名
聲明:本網站發布的內容(圖片、視頻和文字)以用戶投稿、用戶轉載內容為主,如果涉及侵權請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網站立場,如需處理請聯系客服。電話:028-86922220;郵箱:631063699@qq.com。內容未經允許不得轉載,或轉載時需注明來源: 創新互聯