2010-08-27 1 views
4

Я знакомлюсь с Mono development в Linux, в детских шагах. Я пытаюсь назвать библиотеки Linux C. This page, в теории, рассказывает мне, как, но когда я набираю код ниже в MonoDevelop 2.2.2 (Fedora 13), я получаю «Parsing Error (CS8025)» в «private static extern int getpid();». Кроме того, система справки не работает.DllImport не работает так, как рекламируется в Mono (Linux, C#)

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

Пожалуйста, не редактируйте свой вопрос, чтобы включить правильные ответы путем удаления кода проблемы. Затем он становится бесполезным для других лет спустя. – IanNorton

ответ

14

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

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

    ... 
} 
+0

Он теперь строит, но не находит libc.so - см. Выше. – JCCyC

+0

@JCCyC является libc.so по данному пути и доступным для процесса? – JaredPar

+0

Да, но интригующе, он имеет только 238 байт. Ик. Он содержит только текст! Вместо этого я использовал «libc.so.6», и теперь он работает. – JCCyC

2

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

http://www.go-mono.com/docs/index.aspx?link=N%3aMono.Unix

+0

На самом деле мне нужно вызвать некоторые функции UNcommon в сторонних библиотеках, но это действительно полезная информация. – JCCyC