Вызов файла общих объектов UNIX и Linux .so из c # - PullRequest
6 голосов
/ 16 августа 2011

Есть ли способ для файла общего объекта, написанного на C и построенного на Unix, вызываться из C # P / Invoke?

Или мне нужно использовать Java или что-то в этом роде?

Ответы [ 2 ]

9 голосов
/ 16 августа 2011

Mono имеет возможность интеграции с нативными библиотеками из C #, построенными поверх dlopen (3).Вам просто нужно использовать оператор DllImport с именем библиотеки (то есть 'libform.so.5'), а затем обернуть нативный код и типы данных дружественным классом C #, который позаботится обо всех вещах низкого уровня. Эта страница содержит хороший обзор с большим количеством информации о том, как обращаться с указателями маршалинга и другими небезопасными типами.

После того, как вы написали свой класс-обертку, вы можете просто использовать его безбеспокоиться о том, что он использует собственную разделяемую библиотеку внизу.

1 голос
/ 16 августа 2011

Я бы сказал, что, по крайней мере, будет нелегкий путь, особенно если вы имеете в виду C # в Windows. В этом случае вам понадобится что-то, что сможет декодировать общий объект и добраться до кода в нем, что-то вроде повторной реализации ABI для GNU / linux. Также должны присутствовать и использоваться любые другие библиотеки, такие как библиотека времени выполнения C и тому подобное. Это, вероятно, будет очень значительным усилием.

Что касается этого непосредственно в linux / Mono, см. Ответ: Вызов файла общих объектов UNIX и Linux .so из c # .

Вы также можете попытаться выяснить, может ли помочь то, что делает open office, http://packages.debian.org/lenny/cli-uno-bridge; но это скорее интерфейс, а не прямая связь между ними.

...