繁体   English   中英

Windows内核32在Linux上的Mono中运行

[英]Windows kernel32 functions in Mono on Linux

我有一个非常简单的ini类,我之前从某个地方下载过,但是现在我正在使用mono我遇到的问题是它从kernel32导入的东西

[DllImport("kernel32")]
private static extern long WritePrivateProfileString(string section,
    string key, string val, string filePath);
[DllImport("kernel32")]
private static extern int GetPrivateProfileString(string section,
            string key, string def, StringBuilder retVal,
    int size, string filePath);

哪个在mono(在linux中)给出错误DLLNotFoundException: kernel32

有没有办法让这个单声道工作? 也许在编译时将整个东西嵌入到程序集中(如果这甚至是有意义的,我不知道)。 或者我是否必须创建/查找不使用WinAPI的ini类? (妮妮想到了)。

我真的很喜欢它,如果WinAPI的东西可以与Mono合作,任何想法?

Mono支持C#的P / Invoke ,这是运行Win32 API函数所需要的。 (只要你在Windows上运行Mono - 事实上它找不到"kernel32"会让我怀疑你不是。)

网站pinvoke.net为大多数Win32 API收集必要的DllImport签名。

以下是关于GetPrivateProfileString的内容。

这段代码在Windows 7上使用Mono 2.10.8为我工作:

using System;
using System.Text;

public class MainClass
{
  [DllImport("kernel32")]
  private static extern long WritePrivateProfileString(string section,
    string key, string val, string filePath);
  [DllImport("kernel32")]
  private static extern int GetPrivateProfileString(string section,
    string key, string def, StringBuilder retVal,
    int size, string filePath);

  static void Main()
  {
    StringBuilder asdf = new StringBuilder();
    GetPrivateProfileString("global","test","",asdf,100,@"c:\example\test.ini");
    Console.WriteLine(asdf.ToString());
  }
}

您需要在本机.NET中重写这些函数的功能,以便在Mono / Linux上使用它们(除非您能说服Mono和Wine玩得很好)。

如果INI文件受到控制,那么你可能会使用简单的文件/字符串操作,但是最后你可能会更好地转向更多跨平台的东西。

[DllImport("kernel32")]更改为[DllImport("kernel32.dll")]

一切都将开始像应该的那样工作。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM