导出 visual studio c++ 项目以用于另一个项目,但不显示 .cpp 和 .h 源文件

Exporting a visual studio c++ project for use in another project, without revealing the .cpp and .h source files

我有一个名为

的 visual studio 项目

"TopSecretProject"

我想与匿名开发人员用户共享,而不泄露我的任何代码,包括 header 文件(因为我的 .h 文件包含我的项目结构,用户无法了解它)。

用户应该收到:

  1. 他可能调用的函数名称列表(取决于用户拥有的权限)并且用户应该能够使用这些函数作为黑盒开发程序。
  2. 我的封TopSecretProject,他打不开

这种情况有可能吗?

我尝试了以下解决方案但失败了:

  1. 正在导出 TopSecretProject 作为静态库。
  2. 正在为用户创建一个新的 VS 项目,并将 .lib 添加到用户项目中。
  3. 正在将所有 .h 文件复制到用户的项目并创建一个预编译的 header 文件。
  4. 删除 header(现在我有了 .pch,我不再需要它们了)

预编译的 header 在任何 运行 中重建,因此删除了我的第一个预编译的 pch...我也尝试直接从 TopSecretProject 复制 pch 但它没有帮助。

非常感谢!!

pre-compiledheader中的任何导出函数声明,无论您是否希望最终用户能够调用它们,都可以很容易地从 pch(或库)中提取, 对于这个问题)。尝试交付 pre-compiled header 只会让自己头疼。 :-)

相反,如何专门为最终用户创建一个 header 文件,其中声明了您希望他们可以使用的功能?缺点是您必须为每组权限创建一个 header 文件(尽管这比为每组权限指定可用功能更难吗?)

但是请注意,如果任何人想尝试使用该库的其他功能,他们仍然可以查看您库的导出符号。

编辑:

关于 classes,如果你真的不想给出 class 声明,你就必须在 class 之上实现一些层以供他们交互。没有办法解决这个问题。这可能意味着两条路径之一:

一:您可以声明一些用于创建、销毁和使用您的 classes 的函数,并只传回一些好的 ole' void * 指针。例如

typedef void * MySecretClass;

MySecretClass initializeMSC( ... );
void freeMSC( MySecretClass cls );
int useMSC( MySecretClass cls, int param, ... );

二:你可以创建一个包装器class,它基本上做同样的事情。

class MySecretClassWrapper
{
   public:
      MySecretClassWrapper( void );
      int useClass( int param );

   private:
      void * mySecretClassData; // <-- actual class instantiated here
};

编译后的定义:

MySecretClassWrapper::MySecretClassWrapper( void ) {
   mySecretClassData = reinterpret_cast<void *>(new MySecretClass);
}

int MySecretClassWrapper::useClass( int param ) {
   MySecretClass * object = reinterpret_cast<MySecretClass *>(mySecretClassData);
   return object ? object->useClass(param) : -1;
}

第一个是我在使 C++ classes 可用于 C 应用程序时使用的方法。第二个是完全相同的想法,但包含在 class 中,这对于 C++ 用户来说更容易使用。