首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >中的kernel32函数

中的kernel32函数
EN

Stack Overflow用户
提问于 2012-07-22 18:15:19
回答 3查看 7.2K关注 0票数 3

我得到了一个非常简单的ini类,这是我不久前从某个地方下载的,但是现在我使用的是mono,我遇到的问题是它正在从kernel32中导入东西。

代码语言:javascript
复制
[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

有什么办法能让这个和mono一起工作吗?也许在编译时将整个程序集嵌入到程序集中(如果这完全有意义的话,我就不知道了)。或者我必须创建/找到一个不使用WinAPI的ini类?(尼尼想到了)。

我真的很希望WinAPI能和Mono一起工作,有什么想法吗?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2012-07-23 10:45:20

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

如果INI文件是受控制的,那么您可以通过简单的文件/字符串操作来解决问题,但是无论如何,您最好还是跨平台进行一些操作。

票数 3
EN

Stack Overflow用户

发布于 2012-07-22 20:18:59

Mono支持C#的P/调用,这是运行Win32 API函数所需的。(只要您在Windows上运行Mono --它找不到"kernel32"这一事实使我怀疑您没有。)

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

以下是它对GetPrivateProfileString的看法。

此代码适用于我在Windows 7上使用Mono2.10.8:

代码语言:javascript
复制
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());
  }
}
票数 5
EN

Stack Overflow用户

发布于 2013-09-15 18:15:44

[DllImport("kernel32")]转换为[DllImport("kernel32.dll")]

一切都会开始正常工作的。

票数 -3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/11602781

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档