我的一點(diǎn)關(guān)于把WndProc指向類(lèi)的成員函數(shù)的看法-創(chuàng)新互聯(lián)

轉(zhuǎn)載請(qǐng)注明來(lái)源:http://www.cnblogs.com/xuesongshu/我的一點(diǎn)關(guān)于把WndProc指向
類(lèi)的成員函數(shù)的看法

我以前經(jīng)??紤]使用WNDCLASS、CreateThread之類(lèi)的Windows API時(shí)如何在類(lèi)里面調(diào)用,傳入函數(shù)參數(shù)地址時(shí)如何使用成員函數(shù)的地址。為了研究,寫(xiě)了一個(gè)示例代碼:

成都創(chuàng)新互聯(lián)從2013年創(chuàng)立,先為婁星等服務(wù)建站,婁星等地企業(yè),進(jìn)行企業(yè)商務(wù)咨詢服務(wù)。為婁星企業(yè)網(wǎng)站制作PC+手機(jī)+微官網(wǎng)三網(wǎng)同步一站式服務(wù)解決您的所有建站問(wèn)題。#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; }

調(diào)試的時(shí)候發(fā)現(xiàn)在調(diào)用類(lèi)的成員之前堆棧里的this指針是空的,輸入之后輸出結(jié)果的值前者是隨機(jī)的,后者直接訪問(wèn)出錯(cuò)(空引用)。

對(duì)于成員函數(shù)與成員變量而言,同一類(lèi)型的不同對(duì)象的同一成員變量的偏移地址是相同的,訪問(wèn)成員變量時(shí)它們的地址是基于對(duì)象的地址疊加計(jì)算的,如果用上述方法進(jìn)入成員函數(shù)進(jìn)而方問(wèn)成員變量,那么訪問(wèn)出錯(cuò)。就算在訪問(wèn)成員變量之前把對(duì)象指針壓入堆棧,不僅要考慮壓入哪個(gè)對(duì)象的地址,而且這樣使用成員函數(shù)實(shí)際上把它當(dāng)成了全局函數(shù)來(lái)用,與靜態(tài)成員函數(shù)使用在使用目的上沒(méi)有區(qū)別,失去了面象對(duì)象的意義。

當(dāng)前文章:我的一點(diǎn)關(guān)于把WndProc指向類(lèi)的成員函數(shù)的看法-創(chuàng)新互聯(lián)
URL分享:http://bm7419.com/article2/cdipic.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供搜索引擎優(yōu)化、App開(kāi)發(fā)、品牌網(wǎng)站制作、ChatGPT、網(wǎng)站內(nèi)鏈網(wǎng)站排名

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)

手機(jī)網(wǎng)站建設(shè)