Существует несколько способов непосредственного взаимодействия кода на языках. Пока данные, передаваемые между кодом, имеют правильный формат, на уровне битов и байтов, нет никаких причин, по которым разные языки не могут взаимодействовать. Этот подход используется в традиционной разработке Windows DLL. Даже на разных платформах, если вы можете получить правильный формат (посмотрите на big / little endian, если интересно), он будет работать до тех пор, пока ваш компоновщик (не компилятор) знает, как объединить код.
Помимо этого, существует множество других способов общения языков друг с другом. В мире .Net код компилируется в код IL, который одинаков для всех языков, таким образом, C #, VB.Net все одинаковы и могут без проблем вызывать / работать друг с другом.