Bezdepbonusu7Программирование: статьи и ответы

Вопрос

Справка C# DllImport (Mac Os)

Автор вопроса: BraCaОтветов: 3

Я разрабатываю приложение в Mac Os X на С# (с моно), мне нужно взаимодействовать с некоторыми функциями, но я не знаю, как это сделать.

Я сделал простое приложение на C, но теперь мне нужно сделать то же самое на C#, я знаю, что должен использовать DllImport, но я не знаю, как мне это сделать.

Функция, которую я хочу вызвать в C#, такова:

mach_vm_read(vm_map_t target_task, mach_vm_address_t address, mach_vm_size_t size, vm_offset_t *data. mach_msg_type_number_t *data_count);

определяется в одном из этих файлов

#include <mach/mach.h>
#include <mach/mach_vm.h>

Спасибо

  • Можете ли вы импортировать функции из библиотеки DLL Win32 в MacOS X? Очень любопытно узнать, возможно ли это вообще - я думал, что Mono основан на собственных реализациях библиотек классов CLR и .NET? Dylan Beattie 07.02.2011
  • Что ж, функция, которую я хочу импортировать, не из библиотеки Win32, а из библиотеки MacOs, я где-то на веб-сайте Mono прочитал, что должен использовать DllImport для вызова неуправляемых библиотек (даже если они не библиотеки Win32), они также рекомендую использовать Swig для взаимодействия с неуправляемым кодом, но я не думаю, что мне нужно это использовать, мне нужно только вызвать одну функцию. BraCa 07.02.2011

macosinteropdllimport

Ответы

Ответ 1 · рейтинг 1 · James Love

Вы можете объявить и вызвать метод в C#, украсив вызов метода атрибутом [DllImport()], например так (при условии, что ваш метод, который вы хотите вызвать, действительно является статическим методом и не имеет возвращаемого типа):

[DllImport("YourDll.dll")]
public static extern void mach_vm_read(vm_map_t target_task, mach_vm_address_t address, mach_vm_size_t size, vm_offset_t *data. mach_msg_type_number_t *data_count);

Ответ 2 · рейтинг 1 · Michael Armitage

Если у вас много C++, вы можете использовать инструмент под названием Swig, чтобы создать оболочку C# для всех ваших открытые функции C++ с использованием простых шаблонов. Мы использовали это с большим успехом в Windows, Mac OS и Linux.

Ответ 3 · Ana Betts

Эта страница будет наиболее полезной для вас:

Взаимодействие с собственными библиотеками

В общем, P/Invoke в OS X/Linux в Mono работает так же, как и в Windows.

Перевод вопроса и ответов сообщества Stack Overflow, лицензия CC BY-SA. Оригинал на Stack Overflow.

Похожие материалы