2014-02-19 42 views

回答

3

静态库 - no。 DLLs - 是的,当公共接口设计得当时。

通常有两种方式来实现与一个DLL:

  1. 的DLL导出了一些形成一个C风格的API,类似于Windows API函数。这些函数在其签名中仅使用基本类型,以及其数组和结构(无C++类)。对象由控制柄(参见HWNDHDC)表示,并具有一组用于操作这些控柄的功能。

  2. 该DLL是一个COM服务器(或至少导出一个类COM接口)。基本上,工厂函数(在COM中,DllGetClassObject)生产一个指针,指向一个没有数据成员和所有成员函数纯虚拟(通常称为接口)的抽象类。所有的访问都是通过调用这些接口上的方法(这可能反过来制造其他接口指针)。

您应该注意的另一个考虑因素是资源管理 - 特别是(但不限于)内存管理。您不能假定DLL中的内存可能为free d,反之亦然。您必须确保资源分配/释放不会跨越模块边界。这可能是DLL永远不会分配客户端需要释放的内存;或者DLL导出一个特殊的函数,客户端应该调用该函数来释放DLL分配的内存;或者DLL使用操作系统提供的设施(例如COM中的CoTaskMemAlloc/CoTaskMemFree)。