С помощью P / Invoke вы можете вызывать только собственные неуправляемые библиотеки DLL, в которых перечислены функции, которые они экспортируют в них. Java-библиотеки управляются, написаны в некотором псевдокоде (например, IL в .net), только виртуальная машина Java знает, как их интерпретировать.
Например, Паскаль Борланда имел свои библиотеки в некоторых файлах "bpl". Приложения на Паскале скомпилировали некоторый загрузочный код, который знал, как загрузить эти библиотеки, но другие приложения не могли знать, как их использовать.
Итак, вы можете использовать собственные dll с экспортом и COM dll.