Варианты этого вопроса задавались ранее. А именно здесь и здесь .
Решения, похоже, сводятся к двум вариантам
- Используя отражение, чтобы выяснить, что
зовет вас.
- В случае консольного приложения
положить вызов на консоль в try-catch
заблокировать и посмотреть, если это не удается или
преуспевает.
Я рекомендую вашей библиотеке экспортировать интерфейс. Интерфейс имеет функцию или свойство, которые возвращают тип вызывающей стороны. Вызывающий объект имеет класс, который реализует интерфейс и возвращает его тип. Поскольку сложность вызывает беспокойство, вы можете в некоторой степени контролировать ее тем, что размещаете в интерфейсе.
Если приложение не регистрируется в библиотеке, вы можете попробовать выдать ошибку или попробовать схему автоматического обнаружения.
Используя интерфейс и выдавая ошибку, вы делаете это явным для программиста, используя библиотеку, что именно вы ожидаете. Взаимодействие между ними определяется интерфейсом.
Кроме того, взаимодействие более гибкое, чем автоматическая схема, потому что я, как пользователь, могу выбирать, как мой вызывающий двоичный файл взаимодействует с вашей библиотекой, а не каким-то таинственным набором правил.