接口和类如下: interface IF_Dispatch
{
virtual VARIANT Invoke(...) = 0;
} interface IF_Test : public IF_Dispatch
{
virtual void func1() = 0;
virtual void func2() = 0;
}template<class _IF>
class CDispatch : public _IF
{
virtual VARIANT Invoke(...);
virtual void func1();
virtual void func2();
}class CTest : public CDispatch<IF_Test>
{
virtual void func1();
virtual void func2();
}声明:并非com!
我想在模板类CDispatch 中实现Invoke,即程序分发,初步设想:
取得函数名,根据函数名得到函数指针,然后执行函数。这成为整个构想的瓶颈。其他难点不用考虑。各位帮帮忙告诉我怎样有派生类取得基类的虚函数指针,(一种方法当然是访问虚函数表)这在c中似乎无法实现,既无法由派生类虚函数表访问基类虚函数表。555~~~,好像非用汇编硬炸不可了,无奈小弟汇编不到家,正在研究中,也希望各位大侠挺身而出,指点一下,有代码提示最好。 我的汇编思路:把虚函指针压栈,进汇编后弹出使用??但在哪压阿??
烦恼ing.
{
virtual VARIANT Invoke(...) = 0;
} interface IF_Test : public IF_Dispatch
{
virtual void func1() = 0;
virtual void func2() = 0;
}template<class _IF>
class CDispatch : public _IF
{
virtual VARIANT Invoke(...);
virtual void func1();
virtual void func2();
}class CTest : public CDispatch<IF_Test>
{
virtual void func1();
virtual void func2();
}声明:并非com!
我想在模板类CDispatch 中实现Invoke,即程序分发,初步设想:
取得函数名,根据函数名得到函数指针,然后执行函数。这成为整个构想的瓶颈。其他难点不用考虑。各位帮帮忙告诉我怎样有派生类取得基类的虚函数指针,(一种方法当然是访问虚函数表)这在c中似乎无法实现,既无法由派生类虚函数表访问基类虚函数表。555~~~,好像非用汇编硬炸不可了,无奈小弟汇编不到家,正在研究中,也希望各位大侠挺身而出,指点一下,有代码提示最好。 我的汇编思路:把虚函指针压栈,进汇编后弹出使用??但在哪压阿??
烦恼ing.
{
push FunParam ;先将函数参数压栈
push si ;将this指针压栈,以确保在当前类上操作
mov bx,word ptr[si] ;因为VC++编译器将VPTR放在类的第一个位置上,所以bx内为VPTR call word ptr[bx+n] ;调用虚拟函数。n = 所调用的虚拟函数在对应 VTABLE 中的位置
}
在调用之前也可以 MOV ECX,word ptr[Ebx+n]
你这个东西应该是在 WIN 界面下用的,使用的当然是 32位系统,指针也自然用 32bit 的。
可在你的代码里面使用的是 16bit 指针。
你该用内联 32 位汇编做,该不会有问题。
__asm
{
pushad
} __asm
{
push nParam
}
__asm
{
push sParam
}
__asm
{
mov eax, DWORD PTR pObject;
mov edx, DWORD PTR [eax]
mov ecx, DWORD PTR pObject
mov ebx, nIndex
call DWORD PTR [edx+ebx]
}
__asm
{
mov nRetVal, eax
} __asm
{
popad
}十一啦,散分啦!!!