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

Я разрабатываю приложение в 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>

Спасибо


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


Ответы (3)


Вы можете объявить и вызвать метод в 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);
person James Love    schedule 07.02.2011
comment
спасибо за столь быстрый ответ, но как я могу сопоставить эти структуры C (vm_map_t, mach_vm_address_t...) с классами или чем-то еще на C#? (извините, если я такой нуб..) - person BraCa; 07.02.2011
comment
Я думаю, вам следует прочитать о взаимодействии, но я не уверен, работает ли оно одинаково на моно и macosx. - person kubal5003; 07.02.2011

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

person Michael Armitage    schedule 16.12.2019

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

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

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

person Ana Betts    schedule 07.02.2011