1
A
回答
3
静态库 - no。 DLLs - 是的,当公共接口设计得当时。
通常有两种方式来实现与一个DLL:
的DLL导出了一些形成一个C风格的API,类似于Windows API函数。这些函数在其签名中仅使用基本类型,以及其数组和结构(无C++类)。对象由控制柄(参见
HWND
或HDC
)表示,并具有一组用于操作这些控柄的功能。该DLL是一个COM服务器(或至少导出一个类COM接口)。基本上,工厂函数(在COM中,
DllGetClassObject
)生产一个指针,指向一个没有数据成员和所有成员函数纯虚拟(通常称为接口)的抽象类。所有的访问都是通过调用这些接口上的方法(这可能反过来制造其他接口指针)。
您应该注意的另一个考虑因素是资源管理 - 特别是(但不限于)内存管理。您不能假定DLL中的内存可能为free
d,反之亦然。您必须确保资源分配/释放不会跨越模块边界。这可能是DLL永远不会分配客户端需要释放的内存;或者DLL导出一个特殊的函数,客户端应该调用该函数来释放DLL分配的内存;或者DLL使用操作系统提供的设施(例如COM中的CoTaskMemAlloc
/CoTaskMemFree
)。
相关问题
- 1. 如何编译PHP以使其独立于系统库?
- 2. 如何编译独立的FFTW库?
- 3. 独立Java编译器?
- 4. 独立VC++编译器
- 5. 使用脚本#编译代码(独立)
- 6. 这个C++代码如何安全且独立于编译器?
- 7. 如何交叉编译库使用独立的NDK工具链
- 8. 使用GNU编译器生成独立MEX文件,包括库
- 9. 独立的GCC编译工具库
- 10. 反编译代码(独立于语言)
- 11. 如何使Web应用程序独立于Ant版本构建
- 12. 如何使JclAppInstances独立于应用程序文件版本?
- 13. 如何使用eclipse编译器进行独立的即时内存内编译?
- 14. java项目的两个独立编译版本
- 15. 独立于qt版本的语言翻译
- 16. Chrome的独立版本(用于开发)
- 17. ElasticSearch快照独立于ElasticSearch版本
- 18. 编译器独立C++代码资源
- 19. 便携式独立C#编译器
- 20. 如何将独立的Ruby脚本编译为独立的AOT编译的macruby可执行文件?
- 21. 如何升级独立版本的graylog
- 22. 模板和独立编译
- 23. 编译器链接独立静态/动态库
- 24. 使用GCC编译为独立环境
- 25. 独立版本库中的Java软件包比其他版本
- 26. 如何独立于Mercurial项目版本控制.idea文件夹?
- 27. AnnotationLiteral类的独立版本?
- 28. 如何使用solr.analysis.WordDelimiterFilter独立版
- 29. Google Closure编译器 - 将多个文件编译为单独的缩小版本
- 30. 如何让Gradle编译使用较新Java版本的源库?