暑假那个玩意,写到最后发现所有的代码需要全部改,一个严峻的问题就是:c++的代码需要改成c然后再发布在dll上面,我的设计是用一个图形基类,然后每次重绘调用专门的虚函数形成多态。这样,改虚表这个问题就摆在我面前。
首先我们知道,虚函数在大部分编译器的实现都是在结构体起始处,放一个数组指针,这个指针指向一个表,表里面行一些函数指针。
然后继承大概就是一个has-a的关系,这样我的代码就开始写了。
 1#define vfunMAX 2
 2typedef struct __tag_base
 3{
 4    void** v_ptr;
 5/*other member*/
 6}
base;
 7void somefunc()
 8{
 9NULL;
10}

11
12void Init(base* pbase)
13{
14    v_ptr = malloc(vfunMAX * sizeof(void*));
15    v_ptr[0= &somefunc;
16    v_ptr[1= NULL;
17/*other Init*/
18}

19
20
就是类似这样代码实现了一个类的虚表然后在一个类的派生类只需要将虚函数表的相应位置替换掉就可以了,当然我们如果需要直观一点可以用一个枚举类型保存函数名的标号,然后调用即可。。。当然,这个是一个简易的模式,实际上c++的虚函数神马的比这个复杂的多,而且这个也不会出现c++里面很多难以理解情况~所有的情况都在掌握中,也不失为一件坏事,重要的时候,麻烦的改完代码,我也就完成了我的事。。。。