You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

关于__declspec( dllexport )的疑问:类C是导出到DLL还是从DLL导出?

关于__declspec(dllexport)的困惑解答

这个问题其实挺容易绕晕的,我给你直白地解释清楚:

当你在类C的定义前加上__declspec( dllexport )时,你是在把类C从当前编译的DLL文件中导出——换句话说,这段代码属于你正在开发的DLL项目,这个关键字是在告诉编译器:“把这个类C放进DLL里,让外部程序(比如调用这个DLL的EXE或者其他DLL)能访问到它”。

举个实际的例子,假设你正在写一个DLL项目,代码长这样:

__declspec( dllexport ) class C {
public:
    void DoSomething();
    // 其他成员定义
};

编译完成后,生成的DLL文件里就会包含类C的导出符号,外部项目只要链接对应的.lib文件,就能正常使用类C了。

这里再区分下两个容易混淆的场景:

  • 作为DLL的编写者,用dllexport:标记需要对外暴露的类/函数,把它们加入DLL的导出符号表。
  • 作为DLL的使用者,用__declspec(dllimport):告诉编译器“这个类/函数不是我本地实现的,是从外部DLL导入的”。

另外分享一个实用小技巧,大家通常会用宏来自动切换这两个关键字,避免重复写代码:

#ifdef MYDLL_EXPORTS
#define MYDLL_API __declspec( dllexport )
#else
#define MYDLL_API __declspec( dllimport )
#endif

MYDLL_API class C {
    // 类成员定义
};

编译DLL项目时,你只需要在项目设置里定义MYDLL_EXPORTS,宏就会自动变成dllexport;而在使用这个DLL的项目里,不用定义这个宏,宏就会变成dllimport,非常省心。

内容的提问来源于stack exchange,提问作者Edwin Paco

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.19 10:04:19