![]() |
1
2
导出的C++类意味着DLL客户端必须使用与DLL相同的编译器,因为名称的篡改和其他问题。这实际上是个很大的问题,我曾经不得不把C包装写在一堆C++类上,因为客户端程序已经切换到MSVC9,而DLL本身使用MSVC71.[将DLL切换到MSVC90还存在一些其他问题]。从那以后,我一直对导出类的业务持怀疑态度,并且更愿意为所有内容编写一个C包装器。 现在,如果你愿意为导出类付出代价,我认为导出静态数据不会让问题变得更糟。可以说,在可以导出的各种东西中,导出静态常量是最安全的。即便如此,我还是不想这样做,因为正如Timo所说,您现在被锁定在这个实现中。 我工作的一个框架要求其客户机提供一组错误代码常量。随着时间的推移,我们发现使用一组简单的常量太脆弱了,于是我们转向了OO设计。我们有一个默认的实现,它将返回常见的错误代码,但是每个错误代码都是通过一个虚拟函数访问的,这个虚拟函数可以被单个客户端覆盖,并且他们从一些高级的特定于设备的错误处理中使用它。这个解决方案证明了这一点 比基于导出常量的更具可伸缩性。 我建议您在导出静态变量之前,仔细考虑一下您期望组件如何发展。 |
![]() |
2
1
它是否正确,因为它会工作,并做你期望的事情?假设您正在讨论类或类成员上使用的是OpDeExtCuffe(DLLuts/DLimPART),是的,您可以这样做,并且它应该给您预期的结果。静态数据将在DLL之外访问,而其他C++代码可以访问它,只要C++访问规范(公共/受保护/私有)。一开始不会阻挡外面的通道。 这是个好主意吗?就个人而言,我不这么认为,因为您将不仅在库中公开类内部,而且向外部世界公开类内部,这意味着在一天结束时几乎不可能更改实现细节。问问自己,你是否100%确定这个类的接口及其实现的大部分是否永远不会改变。。。 |
![]() |
3
0
类(非静态)数据成员上的dllexport(或import)不执行任何操作。导出的“东西”要么是函数,要么是全局数据(尽管这是一个值得怀疑的设计选择)。类上的dllexport只是表示“导出所有这些函数”的快捷方式。 |
![]() |
Igor Santos de Lima · 导出要在控制台上运行的函数 6 年前 |
![]() |
ksroogl · 将MICE对象导入Stata进行分析 6 年前 |
![]() |
Tyler S · Powershell脚本服务器ping输出 6 年前 |
![]() |
Austin · 从Excel VBA导出数据以访问 6 年前 |
![]() |
J Dev · 自定义p:dataTable的导出输出格式 7 年前 |