常规DLL中导出类到C++程序并使用和继承,请教我方法
美女MM我想出此法在DLL中导出类到C++程序中,可是我想知道其它方法,请高手帮我想想其它方法
1.在DLL中封装类ClassA,并封装一类C函数Out(void),其返回值为一指向DLL中类对象的指针
数据成员全部定义成指针形式
2.生成DLL文件
3.在使用DLL文件的C++程序中定义一个类ClassTemp,这个类中有DLL中待导出的类的所有方法申明(没有实现过程)
4.调用DLL中的类C函数导出类指针并强制转化为(ClassTemp *)类型,赋给类型为(ClassTemp *)的变量pTemp;
即ClassTemp *pTemp = ( ClassTemp * )Out(void)
5.在C++程序中定义导出类ClassAout,其包括ClassA的同样的数据成员(非指针形式)及所有方法,
所有方法实现用pTemp间接获得;通过在ClassAout的购造函数中显式调用ClassA中的构造函数,所有数据成员的地址被赋给ClassA中的对应数据成员的指针。
6.这时,ClassAout便为DLL中类ClassA的导出类,其和ClassA的功能完全一样。并可以在C++程序中继成和使用。
以下是导出DLL中的类A的例子:(伪码描述)
DLL中封装有类:
class A
{
public:
void f1( void )
{
std::cout<<"I love U";
}
A( int *temp )
{
i = temp;
}
privace:
int *i;
}
DLL中封装有类C函数:
A *Out(void)
{
A *ret = new A;
return ret;
};
在C++程序中定义类
Class Temp
{
public:
void f1( void );//只是申明没有实现
Temp( int * );//只是申明没有实现
};
得到DLL中A类对象指针:
Temp *pTemp = Out();//这句要写在导出类的构造函数中
又在C++程序中定义类
Class Aout
{
public:
void f1( void )//通过pTemp间接获得方法实现
{
(*pTemp).f1();
}
Aout()
{
...
Temp *pTemp = Out();//得到DLL中A类对象指针
(*pTemp).A( &i );//所有数据成员的地址被赋给ClassA中的对应数据成员的指针
}
privace:
int i;
};
类Aout则为和DLL中类A完全功能一样的类,可以使用和继承。
这方法我还没有做实验验证,请高手指点