C++中DLL导出类的一些困惑

King19931229 King19931229 墨衍会员 · AI 创作全网分发 墨衍智能分发 通过墨衍一键同步至各平台 可同步平台 CSDN微信公众号微博知乎掘金百家号博客园抖音小红书 你的文章也可以这样分发 墨衍会员 ¥399起/年,写一次发全网 我也要 + 加入社区
最近在写DLL时,发现一件很诡异的事情
以下是我写的DLL

Header.h
#ifdef EXPORT_DLL
# define DLL_EXPORT __declspec(dllexport)
#else
# define DLL_EXPORT __declspec(dllimport)
#endif

class ClassIn
{
public:
virtual void TestFunc();
};

class ClassOut
{
public:
ClassIn in;
virtual void TestFunc();
};

// 获取ClassOut
DLL_EXPORT void GetClassOut(void** ptr);

Source.cpp
#include <cstdio>
#include "Header.h"

void ClassIn::TestFunc()
{
puts("ClassIn::TestFunc()");
}

void ClassOut::TestFunc()
{
puts("ClassOut::TestFunc()");
}

void GetClassOut(void** ptr)
{
static ClassOut out;
*ptr = &out;
}

我在另一个工程获取ClassOut,调用里面的TestFunc() 工程能够链接到
但是如果我不把TestFunc写成虚函数就会链接失败
同理作用于ClassIn

int main()
{
ClassOut* pOut = 0;
GetClassOut((void**)&pOut);
assert(pOut);
pOut->in.TestFunc();
pOut->TestFunc();
}
为什么这两个类不写虚函数就会链接失败
...全文

相关推荐

评论 7
收藏 已收藏
分享
返回顶部
King19931229
C++ 语言 65,214 成员 250,514 内容