2012-05-07 3 views

ответ

2

Конечно, используйте DllImport, как и любую другую функцию C. Вот пример:

using System; 
using System.Runtime.InteropServices; 

class TestSysctl { 

    [DllImport ("libc")] 
    static extern int sysctlbyname (string name, out int int_val, ref IntPtr length, IntPtr newp, IntPtr newlen); 

    static void Main (string[] args) { 
      int value; 
      IntPtr size = (IntPtr)4; 
      string param = "kern.maxproc"; 
      if (args.Length > 0) 
        param = args [0]; 
      int res = sysctlbyname (param, out value, ref size, IntPtr.Zero, (IntPtr)0); 
      Console.WriteLine ("{0}: {1} {2} (res: {3})", param, value, size, res); 
    } 
} 

Обратите внимание, что вы должны определить несколько перегруженных для различных типов данных, возвращаемых во втором аргументе (вы, возможно, придется определить соответствующие структур, как они указаны в заголовках).

+0

Спасибо. Есть ли какой-либо Mono/Mac interop каталог, похожий на http://pinvoke.net? Трудно найти правильный маршалинг типа ... – ivan

+0

Я не знаю ни одного такого каталога. Вы можете прочитать о DllImport и P/Invoke на msdn, и у нас есть страница о некоторых особенностях для моно на http://www.mono-project.com/Interop_with_Native_Libraries. – lupus

Смежные вопросы