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



我有一个名为的视觉工作室项目

"TopSecretProject">

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

用户应收到:

  1. 他可以调用的函数名列表(取决于用户拥有的权限),用户应该能够使用这些函数作为黑匣子来开发程序
  2. 我密封的TopSecretProject,他无法打开

这种情况在任何方面都可能发生吗

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

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

预编译的头在任何运行中都会重新生成,从而删除我的第一个预编译的pch。。。我还试图直接从TopSecretProject复制pch,但没有帮助。

提前非常感谢!!

预编译头中的任何导出函数声明,无论您是否希望最终用户能够调用它们,都可以很容易地从pch(或库)中提取。试图传递预编译的标头只会让自己头疼。:-)

相反,创建一个专门针对最终用户的头文件,在该文件中声明了您希望对他们可用的函数,怎么样?陷阱是你必须为每组权限制作一个头文件(尽管这比为每组指定可用功能更困难吗?)

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

编辑:

关于类,如果你真的不想给出类声明,你就会在类上实现一些层,让它们与之交互。这是绕不开的。这可能意味着两条路径之一:

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

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

第二:您可以创建一个基本上做相同事情的包装器类。

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++类可用于C应用程序时使用的方法。第二个是完全相同的想法,但封装在一个类中,对于C++用户来说更容易使用。

最新更新