3

我得到了这个非常简单的 ini 类,我不久前从某个地方下载了,但现在我正在使用单声道,我遇到了它从 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);

哪个在单声道(在linux中)给出了错误DLLNotFoundException: kernel32

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

如果 WinAPI 的东西可以与 Mono 一起使用,我真的很喜欢,有什么想法吗?

4

3 回答 3

5

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());
  }
}
于 2012-07-22T20:18:59.630 回答
3

您需要在本机 .NET 中重写这些函数的功能才能在 Mono/Linux 上使用它们(除非您可以说服 Mono 和 Wine 很好地发挥作用)。

如果 INI 文件受到控制,那么您可能会摆脱简单的文件/字符串操作,但无论如何您最好还是转向更跨平台的东西。

于 2012-07-23T10:45:20.077 回答
-3

换成[DllImport("kernel32")]_[DllImport("kernel32.dll")]

一切都将开始正常工作。

于 2013-09-15T18:15:44.480 回答