Зацепка в моем приложении - PullRequest
2 голосов
/ 29 мая 2009

Что я должен сделать для реализации системы, подобной крючку?
Это моя установка:

У меня есть эти статические библиотеки:

  • A.lib
  • B.lib

A и B подобны модулям, которые могут быть включены вместе в одном приложении. Дело в том, что у меня есть функция в A, которую я хочу показать B. Я делал это с помощью списка обратных вызовов ... но мне не нравится эта идея. Поэтому я думаю, что могу реализовать систему, похожую на перехват, как в Win32API, но я хочу услышать мнение эксперта.

Конечно, у меня есть доступ к обоим исходным кодам.

ПРИМЕЧАНИЕ. Я забыл упомянуть, что я НЕ использую классы и не могу создать класс или объект для этого проекта из-за проектного решения, поэтому что-то вроде наследования здесь не разрешено.

1 Ответ

2 голосов
/ 29 мая 2009

Рассматривали ли вы перенос разделяемой части в третью библиотеку?

Механизм перехвата не будет большой победой в строго статически связанном сценарии - общая зависимость с дополнительной помощью динамического усложнения. Если у вас есть место, куда поместить обе ваши библиотеки, просто установите вместо этого функцию.

В качестве альтернативы, просто экспортируйте функцию из библиотеки A, ссылайтесь на нее из библиотеки B, возможно, убедитесь, что библиотеки связаны в правильном порядке, и компоновщик должен разобраться за вас.

Если библиотека A может или не может быть связана, и ваш набор инструментов поддерживает ее, вы можете объявить фиктивную версию функции в B как слабый символ , который переопределяется, если A связан.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...