C++中DLL导出类的一些困惑
最近在写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();
}
为什么这两个类不写虚函数就会链接失败
以下是我写的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();
}
为什么这两个类不写虚函数就会链接失败
...全文
相关推荐
C#调用C++DLL导出类
本文将详细介绍如何在C#中调用C++DLL中的类,以及如何在C#端重新封装这些类以便调用。首先,理解C++DLL的导出类机制。
DLL导出类的三种方法,导出接口类,导出类指针,导出类,不建议使用导出类
例如,可以使用C++的`__declspec(dllexport)`和`__declspec(dllimport)`宏来控制导出和导入。2.
【cmake实战十】c++从动态库(dll)导出类
DLL可以减少程序的大小,因为多个程序可以共享同一份库的代码。C++从DLL导出类涉及到两个主要步骤:定义导出标志和编写DLL及客户端代码。1.
C++ DLL 导出类 示例
此外,DLL还有助于软件升级和模块化开发。2. **导出类**: 在C++中,如果你想在DLL中定义一个类并允许外部程序访问,你需要声明这个类为“导出”。
如何在DLL中导出与封装C++类
- 设置项目名称和位置,确保选中"MFC在静态库中使用",以便在不依赖特定版本的MFC运行时库的情况下使用DLL。2. **定义导出类**: - 在DLL项目的头文件中,创建你要导出的C++类。


