【问题标题】:DllImport doesn't work as advertised in Mono (Linux, C#)DllImport 不像 Mono(Linux、C#)中所宣传的那样工作
【发布时间】:2010-08-27 16:00:20
【问题描述】:

我正在逐步了解 Linux 中的 Mono 开发。我正在尝试调用 Linux C 库。 This page 理论上告诉我怎么做,但是当我在 MonoDevelop 2.2.2 (Fedora 13) 中键入下面的代码时,我在“private static extern int getpid();”中得到一个“解析错误 (CS8025)”。此外,帮助系统不起作用。

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!");
        }
    }
}

【问题讨论】:

  • 请不要通过删除问题代码来编辑您的问题以包含正确答案。几年后它对其他人变得毫无用处..

标签: c# linux mono dllimport monodevelop


【解决方案1】:

函数定义不能出现在 C# 的命名空间范围内。这包括 DLL 导入定义。要解决此问题,只需将函数定义移动到类型内。

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

  ...
}

【讨论】:

  • 它现在构建,但它没有找到 libc.so -- 见上文。
  • @JCCyC 是给定路径上的 libc.so 并且可供进程访问?
  • 是的,但有趣的是,它只有 238 个字节。哎呀。它只包含一些文本!我改用“libc.so.6”,它现在可以工作了。
  • 实际上,您应该使用 [DllImport("c")] 单声道来完成其余的工作。
  • @IanNorton - 你有这个快捷方式的参考吗?它在 linux/mac/windows 上是否统一运行?
【解决方案2】:

如果您只需要访问一些常见的 *nix 系统调用,请查看 Mono.Unix 命名空间,它提供了许多函数的包装器。

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

【讨论】:

  • 其实我需要的是调用一些第三方库中不常用的函数,不过确实是有用的信息。
猜你喜欢
  • 2012-05-27
  • 1970-01-01
  • 1970-01-01
  • 2010-10-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-03-05
  • 1970-01-01
相关资源
最近更新 更多