DllImport не работает так, как рекламируется в Mono (Linux, C #) - PullRequest
5 голосов
/ 27 августа 2010

Я знакомлюсь с разработкой Mono в Linux, по шагам.Я пытаюсь вызвать библиотеки Linux C. Эта страница , в теории, рассказывает мне, как, но когда я набираю код ниже в MonoDevelop 2.2.2 (Fedora 13), я получаю "Ошибка синтаксического анализа (CS8025)" в "private static extern int getpid();».Более того, справочная система не работает.

using System;
using System.Runtime.InteropServices;

[DllImport("libc.so")]
private static extern int getpid();

namespace LinuxCaller
{
    class MainClass
    {
        public static void Main (string[] args)
        {
            Console.WriteLine ("Hello World!");
        }
    }
}

Ответы [ 2 ]

15 голосов
/ 27 августа 2010

Определения функций не могут отображаться в области имен в C #.Это включает определения импорта DLL.Чтобы это исправить, просто переместите определение функции в тип.

class MainClass {
  [DllImport("libc.so")]
  private static extern int getpid();

  ...
}
2 голосов
/ 27 августа 2010

Если вам просто нужен доступ к некоторым общим системным вызовам * nix, проверьте пространство имен Mono.Unix, которое предоставляет обертки для множества функций.

http://www.go -mono.com / Docs / index.aspx? Ссылка = N% 3aMono.Unix

...