Есть ли способ, чтобы файл Shared Object, написанный на C и построенный на Unix, вызывался из C# P/Invoke?
Или мне нужно использовать Java или что-то в этом роде?
Есть ли способ, чтобы файл Shared Object, написанный на C и построенный на Unix, вызывался из C# P/Invoke?
Или мне нужно использовать Java или что-то в этом роде?
Mono имеет возможность интегрироваться с собственными библиотеками из C#, созданного поверх dlopen(3). Вам просто нужно использовать оператор DllImport с именем библиотеки (например, «libform.so.5»), а затем обернуть собственный код и типы данных дружественным классом C#, который позаботится обо всех низкоуровневых вещах. Эта страница содержит хороший обзор с большим количеством информации о том, как обращаться с указателями маршалинга и другими небезопасными типами. .
После того, как вы написали свой класс-оболочку, вы можете просто использовать его, не беспокоясь о том, что он использует встроенную общую библиотеку.
Я бы сказал, что, по крайней мере, простого пути не будет, особенно если вы имеете в виду C# в Windows. В этом случае вам понадобится что-то, что сможет декодировать общий объект и добраться до кода в нем, своего рода повторная реализация ABI для GNU/linux. Кроме того, должны присутствовать и использоваться любые другие библиотеки, такие как библиотека времени выполнения C и тому подобное. Вероятно, это будет очень серьезное усилие.
Что касается того, чтобы сделать это непосредственно под linux/Mono, см. этот ответ: Вызов общего объектного файла UNIX и Linux .so из c# .
Вы также можете попробовать посмотреть, что делает open office, http://packages.debian.org/lenny/cli-uno-bridge может пригодиться; но это скорее интерфейс, а не прямая связь между ними.