我想知道在VC++中导出类 (__declspec(dllexport)) 是否属于某种标准( ANSI,ISO,...)
我想知道是否有人已经尝试使用Intel C++编译器和GCC(在Windows上的mingw),以及是否可以混合使用从不同编译器生成的DLL(我真的怀疑这是可能的)
谢谢
我想知道是否有人已经尝试使用Intel C++编译器和GCC(在Windows上的mingw),以及是否可以混合使用从不同编译器生成的DLL(我真的怀疑这是可能的)
谢谢
不,__declspec 是VC++特有的。
VC++需要这个的原因之一是,默认情况下,DLL不会在未明确请求的情况下将符号公开到DLL外部。在Posix上,共享对象公开所有它们的(非静态)符号,除非明确告诉它们隐藏这些符号。
更新
根据您的评论,您想使代码可移植,您需要使用预处理器并执行以下操作:
#ifdef WIN32
#ifdef EXPORT_CLASS_FOO
#define CLASS_FOO __declspec(dllexport)
#else
#define CLASS_FOO __declspec(dllimport)
#endif
#else
#define CLASS_FOO
#endif
class CLASS_FOO foo
{ ... };
在C++中,以__开头的任何内容都是供应商特定的扩展。我不知道其他编译器供应商是否支持此功能,但它绝对不是跨编译器兼容的。
DLL的概念非常与平台相关,没有任何普遍适用的标准。实际上,DLL这个缩写通常仅用于Windows动态库。需要注意的是,在C/C++中支持DLL的任何内容都非常依赖于平台/供应商。