C++ 如何重新设计c++;上课?

C++ 如何重新设计c++;上课?,c++,dll,dllexport,C++,Dll,Dllexport,我有很多这样的课程: class A { public: std::string s; std::vector<int> v; int a; } A a; a.s = "abc"; b.v.push_back(4); 但由于无法导出向量和字符串,因此这是不可能的。除了为每个成员提供getter和setter,并使用包含这些getter和setter的抽象接口之外,还有什么方法可以解决这个问题吗?DLL只提供对全局变量和函数的引用,因为您的类都不使用,所以您无法

我有很多这样的课程:

class A 
{
public:
   std::string s;
   std::vector<int> v;
   int a;
}
A a;
a.s = "abc";
b.v.push_back(4);

但由于无法导出向量和字符串,因此这是不可能的。除了为每个成员提供getter和setter,并使用包含这些getter和setter的抽象接口之外,还有什么方法可以解决这个问题吗?

DLL只提供对全局变量和函数的引用,因为您的类都不使用,所以您无法从DLL中导出类中的任何内容。通常,你会把你的类放到头文件中,在你的DLL和HeaveStudio之间共享头文件,就像你将用一个具有多个源文件的C++项目一样。

在DLL接口上有STL类是一个非常脆弱的设计:如果你这样做,DLL的所有客户端都必须使用VisualC++编译器<>强>相同的版本,并且<强>相同的设置(例如,相同的代码> 这是非常有限制的

您可能希望遵循不同的路径。例如,您可以构建一个强的> PURE C接口 API层,包装您的C++类,并从DLL导出。带有纯C接口的DLL很好(例如,想想Win32 API)。
然后,您可以分发一个头文件,其中PURE C接口被封装在C++类中,准备好被客户端使用(例如,考虑ATL/WTL,这是PURE C Win32 API上的方便的C++包装)。

或者您可以遵循一种通用的方法,导出C++接口。 您可以在本文中找到有关这方面的更多详细信息:


在重新设计某些东西时,试着拿出一个合理的设计。一堆公共数据成员,不管是裸的还是用getter/setter修饰的,都不是。如果您试图解决假定的MSVC无法导出字符串的问题,请将其称为解决方法,而不是重新设计,事实并非如此。无论如何,如果您认为不应该导出字符串数据成员,那么同样,您也不应该导出字符串getter。“在DLL接口上使用STL类是一种非常脆弱的设计”。似乎只有在微软的世界里。