Я даже не знаю, что посоветовать почитать...
Пик внимания был давно, ссылки порастерялись, но поищу.
ЗЫ Тут ещё такое дело. Насчёт связи приложений может ничего и не быть,
потому что связи как таковой нет.
Некоторые акценты (всё "в первом приближении", везде есть нюансы, но для начала пойдёт):
1. В дотнет ЛЮБАЯ сущность - это класс.
2. Приложение - это набор классов, среди них есть "корневой".
3. Исполняющая среда дотнет при запуске приложения вызывает конструктор
"корневого" класса -> приложение запускается.
Примерно такая механика. Далее.
4. Ничто не мешает из Вашего приложения несложными действиями загрузить в исполняющую среду любое другое
приложение и вызвать его "корневой" конструктор -> оно запустится.
Грубо говоря, в дотнет нет разницы между библиотекой и приложением, и то, и другое - наборы классов.
5. После того, как выполнен п.4, т.е. создан экземпляр класса (постороннего) приложения, становятся доступны его свойства, методы и пр.
6. Пункты 4 и 5 можно делать в "RunTime" с помощью внятного набора методов стандартных классов исполняющей среды .NET;
эти классы являются частью дотнет и существуют всё ремя, пока существует дотнет.
7. Всё можно упростить, если в MSVS в проект своего приложения "подключить" другие приложения (прямо экзешники!),
для этого в соответствующем окошке нужно тыканьем мышкой выбрать подключаемый файл. После успешного подключения
вся начинка подключенного становится доступной прямо во время проектирования Вашего приложения. Естественно,
подключаемые должны быть дотнет-приложениями (хотя и не обязательно))).
8. Да, собственно исполняющая среда дотнет - это тоже набор (экземпляров) классов; этот набор является частью Виндовс и существует,
пока существует Виндовс.
9. Естественно, исполняющая среда предоставляет доступ к WinAPI и пр. через классы-обёртки. Обычно эти обёртки не нужны.
т.к. набор стандартных классов дотнет очень велик и позволяет работать и с железом, и с системой на уровне классов. При
желании можно использовать WinAPI и напрямую.