Nisy 发表于 2023-10-8 16:35:45

C++ 导出类还原的问题

我把问题整理备忘一下,有个 Dll (见附件)导出的函数中,和 CxImage 类相关的只有这四个函数:


000B   000A   000015F0    ??1CxImage@@UAE@XZ// public: virtual __thiscall CxImage::~CxImage(void)
0013   0012   000F223C    ??_7CxImage@@6B@ < DATA >(1)// const CxImage::`vftable'
0016   0015   00001610    ??_FCxImage@@QAEXXZ// public: void __thiscall CxImage::`default constructor closure'(void)
0018   0017   00001620    ??_OCxImage@@QAEXAAV0@@Z// public: void __thiscall CxImage::`copy constructor closure'(class CxImage &)


那么请问,源代码中 CxImage 这个类的代码是怎么写才能实现这个导出效果的。

// < DATA >(1)说明虚表只有一项

Nisy 发表于 2023-10-8 17:30:53

补充下我的分析:

后三个导出是编译器自动生成的,首先你要解决怎么做到让编译器自动生成这三个导出函数。因为这三个是编译器默认生成的,所以源码应该是把整个类导出了,生成 `default constructor closure' 需要一个非默认构造,而导出中又不存在非默认构造。分析到这里感觉是出现了悖论 ...

飞天梦 发表于 2023-10-8 20:37:50

谢谢分享

Dr.FarFar 发表于 2023-10-9 06:42:13

谢谢分享

鲲鹏 发表于 2023-10-9 10:54:15

虚表中仅存的一个函数为析构函数。
public: virtual __thiscall CxImage::~CxImage(void)
默认构造。
public: void __thiscall CxImage::`default ctor closure'(void)
复制构造。
public: void __thiscall CxImage::`copy ctor closure'(class CxImage &)
事实上,还额外存在由SDL自动生成的函数。
public: void __thiscall CxImage::__autoclassinit2(unsigned int)
这是用于初始化类内指针成员的。暗示了类内存在指针成员。

Nisy 发表于 2023-10-11 13:56:24

鲲鹏 发表于 2023-10-9 10:54
虚表中仅存的一个函数为析构函数。
public: virtual __thiscall CxImage::~CxImage(void)
默认构造。





多谢 ~
页: [1]
查看完整版本: C++ 导出类还原的问题