我得到了一个非常简单的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。
有什么办法能让这个和mono一起工作吗?也许在编译时将整个程序集嵌入到程序集中(如果这完全有意义的话,我就不知道了)。或者我必须创建/找到一个不使用WinAPI的ini类?(尼尼想到了)。
我真的很希望WinAPI能和Mono一起工作,有什么想法吗?
发布于 2012-07-23 10:45:20
您需要在本机.NET中重写这些函数的功能,以便在Mono/Linux上使用它们(除非您能够说服Mono和Wine很好地发挥作用)。
如果INI文件是受控制的,那么您可以通过简单的文件/字符串操作来解决问题,但是无论如何,您最好还是跨平台进行一些操作。
发布于 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:
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());
}
}发布于 2013-09-15 18:15:44
将[DllImport("kernel32")]转换为[DllImport("kernel32.dll")]
一切都会开始正常工作的。
https://stackoverflow.com/questions/11602781
复制相似问题