¥请活跃于软件前沿的高手回答:如何实现不同发布者类的继承¥
yesry 2003-06-25 04:51:30 类似于COM。
甲编写了 class A;发布了目标代码,不会发布全部源代码,只能发布class的部分说明。
乙编写了 class B:public A;
由于class A只有部分函数说明和部分成员的声明,所以,乙开发的时候发生困难,virtual函数表可能不完全,所以可能不能对齐。成员变量更不用说了,更难对齐。
例如:
甲开发了
class MyClass
{
public:
virtual void F1()
{
ShowMessage("MyClass F1 in dll");
}
int x,y;
};
class MyClass2:public MyClass
{
public:
virtual void F1()
{
MyClass::F1();
ShowMessage("MyClass2 F1 in dll");
}
};
extern "C"
__declspec(dllexport) MyClass * WINAPI CreateMyClass()
{
return new MyClass2;
}
发布的时候
class MyClass
{
public:
virtual void F1()
{
//实现的源代码不会发布的。
}
int x,y;
};
对于乙。
//从甲处得到
class MyClass
{
public:
virtual void F1()
{
//实现的源代码不会发布的。
}
int x,y;
};
class MyB:public MyClass
{
virtual void F1()
{
MyClass::F1();//重要问题:如何调用没有源代码的甲的实现方法?如果可以,还能实现MyClass2::F1的功能。
x=1;y2=3;//两边都能访问。
}
};
MyClass * (*CreateMyClass)();
void __fastcall TForm1::Button1Click(TObject *Sender)
{
HMODULE h;
h=LoadLibrary("Class.dll");
(void*)CreateMyClass=GetProcAddress(h,"CreateMyClass");
MyClass *c=CreateMyClass();//到了这里,我不能实现了,我的原意是实现MyB的实例创建的。
c->F1();
}
不知道大家看明白了没有,我的意思是:甲发布部分源代码和目标代码,乙继承甲发布的class,并且使用、扩充甲的class的功能。然后,更高级的是,甲能调用没有发布任何源代码的乙的目标代码。我们知道COM有继承性,但是成员变量不好访问,并且函数参数类型极其有限。
这些问题都是开发系统软件必备的。请各位高手讨论讨论,对大家都有好处。