在C++;图书馆 我们创建了一个库,它既有 .LIb和.DLL>强(它是一个大的库,完全是用C++编写的,用于Windows平台)。用户可以在自己的程序或库中使用该库,也可以在任何他们想使用它的地方使用它

在C++;图书馆 我们创建了一个库,它既有 .LIb和.DLL>强(它是一个大的库,完全是用C++编写的,用于Windows平台)。用户可以在自己的程序或库中使用该库,也可以在任何他们想使用它的地方使用它,c++,visual-c++,dynamic,dll,c++03,C++,Visual C++,Dynamic,Dll,C++03,但我想将某些功能限制在某些用户身上。 比如说, 我们的库有3个函数foo(),bar()和hoo() 用户A为函数foo()、bar()和hoo()付费 用户B为功能bar()和hoo()付费 因此,当我们提供B库文件(headers/libs/dll等)时 我们可以创建库的副本,删除foo()函数及其相关内容,并将其发送到B 或我们可以把整个库发给他,用某种方法阻止他使用foo() 第一种方法并不好,因为这是一项庞大的工作,必须小心依赖关系。即使我们确信bar()和hoo()不依赖于fo

但我想将某些功能限制在某些用户身上。
比如说,

  • 我们的库有3个函数
    foo()
    bar()
    hoo()
  • 用户A为函数
    foo()
    bar()
    hoo()
    付费
  • 用户B为功能
    bar()
    hoo()
    付费
因此,当我们提供B库文件(headers/libs/dll等)时

  • 我们可以创建库的副本,删除foo()函数及其相关内容,并将其发送到B
  • 我们可以把整个库发给他,用某种方法阻止他使用
    foo()

    • 第一种方法并不好,因为这是一项庞大的工作,必须小心依赖关系。即使我们确信
      bar()
      hoo()
      不依赖于
      foo()
      ,但删除东西并为它们提供自定义版本的库仍然是一件令人头痛的事情,该库还将包括更多的测试。而维护将更成问题。SVN也会变得混乱
    • 我想第二种方法是最好的。但是怎么做呢
  • 如果B以后为
    foo()
    函数付费呢?那我就得让他用了


    我想你现在明白问题所在了。这两种方法只是我的观点,也许我对它们的结论也可能是错误的。因此,我想问是否有人对此有任何想法/建议。

    第三方许可库正是为此目的而存在的。我可以命名为Flex(无附属关系),我知道它具有您正在寻找的确切功能。

    我将尝试使用(导出转发)部分实现此机制。这种机制允许您构建一种代理库,您可以分发它,它“什么都不做”,只是将真正的代码执行转发给其他库。这样做的好处是可以提供一个单一的通用接口,但要区分用户及其在其他库层中使用API的“权限”。

    您可以发明一种公钥/私钥“解锁”机制。但这很可能是一个付出了大量努力却收获甚微的过程。我提出的任何建议都不是不可能被人破解的


    为什么不按照您提供的不同许可方案将代码二进制文件拆分?即:上面的客户A获得foo.lib、bar.lib和hoo.lib。客户B只获得bar.lib和hoo.lib。两者都有一个“sharedcode.lib”,它具有所有的公共依赖项。

    我只需要创建一个版本的
    .dll
    ,包括头文件,然后让用户下载导入libs,以获得他所支付的费用。除此之外,律师是最好的工具

    有人买了额外的模块吗?让他们下载额外的导入库

    您内置的任何类型的保护/锁定(无论是对
    has\u paid
    布尔值的简单检查、公钥方案还是代理库)都可以绕过。有些更容易忽略,有些则更难

    通过不给他们必要的导入库,比如模块
    foo
    ,你给了诚实的客户一个温和的提示

    还会有人为了你的钱欺骗你吗?当然他们会的(如果你的产品足够有趣的话),但是这些人会这样做。他们还不如从一开始就盗版整个软件包。他们是那种无论如何都不会为你的产品付钱的人。那是你找律师的地方

    大多数人会为了你的钱欺骗你吗?不大可能发生的愿意为你的产品付费的人不太可能欺骗你一半的许可费,至少是故意的。这是一个大风险的小收益。你很容易发现有人在欺骗你。
    他们是有身份的人,他们会失去一些东西。他们不想卷入一场耗资几十万美元的诉讼(这意味着失去他们的资产),也不想卷入负面宣传。
    这可能只是无意中发生的,但由于您没有提供必要的导入lib,所以这是不可能的

    您可以以非常简单的方式将用户视为三个类别之一:

    • 我们是一家拥有5名开发人员的小型软件公司,我们已经经营了3年,公司拥有50000股股权。我们已经为
      foo
      许可证支付了500英镑,而
      bar
      许可证将花费我们另外500英镑。您知道我们正在使用您的库,因为我们购买了
      foo
      。我们知道你知道。一场诉讼将花费我们大约5万英镑——哦,该死,让我们多付500英镑吧
    • 我们是微软。如果有人发现我非法使用这个图书馆,我会被炒鱿鱼。现在,如果我在他午餐后的睡眠中打扰他,超过500美元的预算,我的主管会怎么说?该死,我们可能还需要两个无聊的会议来决定。让我想想,我想我们可以用这个帐户预订
    • 我是个疯子。我很酷,但我还是要用你们的图书馆做一个我在学校的5个朋友会用的程序。许可证执照是给失败者的。反正你也找不到我的名字

    前两个有损失,第三个没有。前两个会付钱给你,不会(故意)欺骗你。最后一个你根本不关心的问题。

    一些好的方面。谢谢但是我该如何创建那些
    lib
    s呢。有没有办法自动控制