在外部凋用Class中的private函数
在C++中,一般情况下Class中的private函数是不能在外部调用的,但通过下面这种特殊的方法可以突破这个限制。
1 #include <iostream>
2
3 using namespace std;
4
5 void End();
6
7 class CTest
8 {
9 private:
10 void __stdcall foo (int A) { cout<<"A = "<<A<<endl; };
11 };
12
13 int main(int argc, char *argv[])
14 {
15 atexit(End);
16
17 //调用Class中的private函数
18 CTest obj;
19
20 unsigned long FooAddrPtr = 0;
21 __asm
22 {
23 //得到CTest::foo偏移地址
24 MOV EAX, OFFSET CTest::foo
25 MOV [FooAddrPtr], EAX
26 }
27
28 //方法一
29 void (__stdcall *FooPtr) (void* /*this*/, int /*A*/) = (void (__stdcall *) (void*, int)) FooAddrPtr;
30 FooPtr(&obj, 9);
31
32 //方法二
33 union
34 {
35 unsigned long FooAddr;
36 void (_stdcall *foo_ptr) (void *, int);
37 }T;
38
39 T.FooAddr = FooAddrPtr;
40 T.foo_ptr(&obj, 9);
41
42 return 0;
43 }
44
45 void End()
46 {
47 system("PAUSE");
48 }
方法一是直接用函数指针转换,方法二是利用union中成员变量公用同一块内存从而进行强制转换。方法二还可用在很多需要类型强制转换的地方。
浙公网安备 33010602011771号