我现在使用msvc编译器
我想创建独立于mvsvc版本的链接库(lib,dll)..
是否可以制作独立的图书馆?
答案 0 :(得分:3)
静态库 - 没有。 DLLs - 是的,当公共接口设计得恰当时。
使用DLL通常有两种方法:
DLL导出许多形成C风格API的函数,类似于Windows API。这些函数在其签名及其数组和结构(无C ++类)中仅使用原始类型。对象由句柄(参见HWND
或HDC
)表示,并带有一组用于操作这些句柄的函数。
DLL是一个COM服务器(或者至少导出一个类似COM的接口)。基本上,工厂函数(在COM中,DllGetClassObject
)生成一个指向抽象类的指针,该抽象类没有数据成员,所有成员函数都是纯虚拟的(通常称为接口)。所有访问都是通过调用这些接口上的方法(这可能反过来制造其他接口指针)。
您应该注意的另一个考虑因素是资源管理 - 特别是但不限于内存管理。您不能假设DLL中的内存malloc
在客户端中可能是free
d,反之亦然。您必须确保资源分配/取消分配永远不会跨越模块边界。可能是DLL永远不会分配客户端需要释放的内存;或者DLL导出一个特殊的函数,客户端应该调用它来释放DLL分配的内存;或者DLL使用操作系统提供的工具(例如COM中的CoTaskMemAlloc
/ CoTaskMemFree
)。