2011-02-07 5 views
1

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

Я сделал простое приложение на 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> 

Благодаря

+0

Можете ли вы импортировать функции из DLL Win32 в MacOS X? Очень любопытно узнать, возможно ли это вообще - я думал, что Mono основывается на собственных реализациях библиотек классов CLR и .NET? –

+1

Ну, функция, которую я хочу импортировать, не из библиотеки Win32, ее из библиотеки MacOs, я где-то на веб-сайте Mono, я должен использовать DllImport для вызова неуправляемых библиотек (даже если они не являются библиотеками Win32), они также рекомендуем использовать Swig для взаимодействия с неуправляемым кодом, но я не думаю, что мне нужно его использовать, мне нужно только вызвать одну функцию. – BraCa

ответ

1

Вы можете объявить и вызвать метод в 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); 
+0

спасибо за ответ так быстро, но как я могу сопоставить эти C-структуры (vm_map_t , mach_vm_address_t ...) на классы или что-то в C#? (извините, если я такой noob ..) – BraCa

+0

Я думаю, вы должны прочитать о interop, но я не уверен, что он работает так же на моно и macosx .. – kubal5003

0

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

Interop with Native Libraries

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

+0

tks, это помогло;) – BraCa