C++ 为c+创建接口+;动态链接库

C++ 为c+创建接口+;动态链接库,c++,visual-c++,dll,C++,Visual C++,Dll,我有一个类,它是用文本文件的路径构造的。它解析文本文件,并将大量数据存储在各种向量和映射中作为其成员。我想将该类作为dll与MSV不同版本的用户共享(这对我来说是新的) 我最初的实现是直接返回STL容器的。阅读后,我的理解是,这是危险的,因为不同的编译器或同一编译器的不同版本可以轻松地以不同的方式实现容器。我看到的一个解决方案是显式地实例化您正在使用的任何模板,并将其导出。我也有字符串,所以我需要实例化并导出它,因为std::string实际上是更复杂模板的别名。然而,即使我走了这条路线,似乎我

我有一个类,它是用文本文件的路径构造的。它解析文本文件,并将大量数据存储在各种向量和映射中作为其成员。我想将该类作为dll与MSV不同版本的用户共享(这对我来说是新的)

我最初的实现是直接返回STL容器的。阅读后,我的理解是,这是危险的,因为不同的编译器或同一编译器的不同版本可以轻松地以不同的方式实现容器。我看到的一个解决方案是显式地实例化您正在使用的任何模板,并将其导出。我也有字符串,所以我需要实例化并导出它,因为std::string实际上是更复杂模板的别名。然而,即使我走了这条路线,似乎我也无法导出地图

我现在所做的不是让用户访问容器,而是使用访问器函数获取索引(或映射的键,或映射向量的键和索引)并获取值。我的所有参数和返回值都是基本类型,包括字符串的const char*


我对这个问题的理解正确吗?这是一个合理的解决方法吗?我需要担心C++中的积分原语在标准中没有严格定义吗?我想我也可以使用std定义的整数类型。一个问题是,用户将无法迭代容器或检查大小。我可以作为一个成员提供大小(所有向量都是相同的大小),然后我想如果用户需要其他向量功能,就应该由用户提供自己的向量并填充它

“这是一个合理的方法吗?”差不多。我并没有提到内存分配和释放;确保它们不跨越dll边界(即分配一方,取消分配另一方)。我想我理解这一点。我是按值返回的,所以这不是问题。除了常量字符*。如果有人试图删除那个记忆,那会很糟糕,对吗?但不管dll的边界如何,这都是一个问题,我认为?如果有人试图删除内存,它将无法确定会发生什么,您无法控制它。通常,您应该为它们提供一个释放函数(在dll中),然后您可以提供一个RAII类来帮助客户机管理它。