2009-05-29 74 views
2

我应该怎么做才能实现钩状系统?
这是我的设置:挂钩我的应用程序

我有这些静态库:

  • A.LIB
  • B.LIB

A和B相似的模块可包括一起内同一个应用程序。事情是我在A中有一个函数,我想向B公开。我正在用回调列表来做这件事......但我对这个想法并不满意。所以我认为我可以实现像Win32API一样的钩状系统,但我想听取专家的意见。

当然,我可以访问两个源代码。

注意:我忘记提及我没有使用类,并且由于设计决定,我无法为此项目创建类或对象,因此这里不允许继承等内容。

回答

2

您是否考虑将共享部分移出到第三个库中?

在一个严格的静态链接场景中,挂钩机制不会有太大的收获 - 共享依赖性和额外的动态并发症。如果你有一个地方可以让你的图书馆能够获得钩子,那就把它放在那里。

或者,只需从库A中导出函数,从库B中引用它,也许确保库以正确的顺序链接,并且链接器应该为您排序。

如果库A可能链接或不链接,并且您的工具链支持它,则可以在B中声明一个虚拟版本的函数,如果链接了A,则该函数将被覆盖。

+0

感谢您的快速回复。是的,我做了,但事情是我只想公开这个函数,所以我看到毫无意义的生成一个额外的依赖项的应用程序,只是因为一个函数。 – Veehmot 2009-05-29 01:12:36