2010-08-27 14 views
4

Je commence à connaître le développement Mono sous Linux, à petits pas. J'essaie d'appeler les bibliothèques Linux C. This page, en théorie, me dit comment, mais quand je tape le code ci-dessous dans MonoDevelop 2.2.2 (Fedora 13), j'obtiens une "Erreur d'analyse (CS8025)" dans "private static extern int getpid();". De plus, le système d'aide ne fonctionne pas.DllImport ne fonctionne pas comme annoncé dans 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

S'il vous plaît ne pas modifier votre question d'inclure les bonnes réponses en supprimant le code de problème. Il devient alors inutile aux autres années plus tard .. – IanNorton

Répondre

14

Les définitions de fonction ne peuvent pas apparaître dans l'étendue de l'espace de noms en C#. Cela inclut les définitions d'importation de DLL. Pour corriger cela, il suffit de déplacer la définition de la fonction dans un type.

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

    ... 
} 
+0

Il construit maintenant, mais il ne trouve pas libc.so - voir ci-dessus. – JCCyC

+0

@JCCyC est libc.so sur le chemin donné et accessible au processus? – JaredPar

+0

Oui, mais curieusement, il a seulement 238 octets. Eek. Il contient juste du texte! J'ai utilisé "libc.so.6" à la place et cela fonctionne maintenant. – JCCyC

2

Si vous avez juste besoin d'accéder à certains appels système commun * nix, consultez l'espace de noms Mono.Unix qui fournit des emballages autour d'un grand nombre de fonctions.

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

+0

En fait, ce dont j'ai besoin, c'est d'appeler certaines fonctions UNCommon dans des bibliothèques tierces, mais c'est effectivement une information utile. – JCCyC