c++ - 与客户共享 C++ DLL 和 H 文件

标签 c++ dll visibility header-files class-visibility

我职业生涯中的第一次,我必须向客户交付一个 DLL,其中包含我们的基础、通用软件和一个界面,使其按照客户希望的方式工作 + 允许客户输入和读取输出。

现在我的大问题是,由于知识产权的原因,我可能不会向我的客户展示他绝对不需要知道的任何内容。这包括数据类型,因此我什至无法向他展示我们任何内部方法的签名。我创建了模仿我们自己内部数据类型和结构的数据类型和结构,但例如,它们自愿省略不必要的属性/元素或给它们不同的名称以隐藏对我们私有(private)内部逻辑的提示。然后获取数据的方法将我们自己的数据结构映射到这些数据结构中。你明白了。

还有,这次从纯软件架构的角度,我不想让他访问某些成员,属性,变量...因为我不需要他知道它们的存在或者不想让他修改他们在他高兴的时候和他高兴的时候。然而,它们仅与该界面相关,根本不是我们内部软件的一部分。

我现在拥有的是一个用作接口(interface)的类,他可以将其实例化。它主要提供用于输出的 get 方法、提供输入和启动更新计算的方法,以及用于其他参数和值(如软件版本或当前状态)的 getter 和 setter。这些参数和其他变量的实际数据变量隐藏在我的 CPP 文件中,该文件被编译到 DLL 中,因此它们甚至没有声明为我们在我给他的 H 文件中用作接口(interface)的类的属性,甚至没有作为私有(private),他不知道它们 - 他只有 getter 和 setter。

我应该在这里使用什么设计模式?我真的可以将我的变量放在我与客户共享的 H 文件中,作为类的属性,作为 private 吗?但是,他是否能够将它们从私有(private)更改为公共(public),并通过为该类编写新方法、访问它们并自由修改它们而不会引起编译器的提示?我能否以其他方式为我的类(class)做出贡献,并在我的 CPP 文件或他无法访问的其他一些 H 文件中扩展它?

这么多问题,因为这对我来说是全新的。但是你得到了一般情况:我想在这个 H 文件中与我的客户共享严格必要的、最少的信息,这样他就可以使我的 DLL 工作并获得他的数据输出。仅此而已。

提前致谢, 查尔斯

最佳答案

首先,您应该考虑构建一个带有纯 C 接口(interface)的DLL,因为在 DLL 边界处具有带有 STL 类的 C++ 接口(interface)是高度约束(例如,您的客户有使用 相同 Visual C++ 编译器版本并动态链接到与用于构建 DLL 的相同 CRT 风格)。

此时,您可以自由开发一个薄层来向客户屏蔽/隐藏您的 C++ 实现(在 DLL 中编译并以二进制形式交付)。

您还可以提供一个简单的公共(public)头文件,它可以以一种很好的 C++ 面向对象的方式包装由 DLL 公开的 C 接口(interface)层(有点像 ATL 和 WTL 对 Win32 纯 C API 函数所做的那样)。

关于c++ - 与客户共享 C++ DLL 和 H 文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39892325/

相关文章:

ruby - Ruby 方法 instance_eval() 和 send() 不会否定私有(private)可见性的好处吗?

c++ - 使用 C++ 和修改基类的私有(private)/保护属性

c# - C# 中的 PKCS #11 库

java - 判断链表是否是循环的

c++ - C++ DLL程序退出时: Run-Time Check Failure #2

c# - Marshal.GetDelegateForFunctionPointer 失败

php - pdo变量在mysql函数中未定义

javascript - 如何在用户进行选择时切换可见性

C++ 在数组中存储任何子结构/类?

c++ - Qt中给成员变量设置父子关系