Има ли начин файл със споделен обект, написан на C и изграден на Unix, да бъде извикан от C# P/Invoke?
Или трябва да използвам Java или нещо подобно?
Има ли начин файл със споделен обект, написан на 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 може да бъде полезен; но това е по-скоро интерфейс, отколкото директно свързване на двете заедно.