找不到pinvoke dll' kernel32'

时间:2018-02-12 06:29:59

标签: c# dll pinvoke kernel32 missingmethodexception

我想在我的程序中使用Windows CE设备使用ini文件。 我得到了例外"找不到pinvoke dll' kernel32'" 我该怎么做才能解决这个问题?请帮帮我!

string Path = "c:\\Settings.ini";
        [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);

    public string Read(string Section,string Key,string Value)
    {
        StringBuilder sb = new StringBuilder();
        GetPrivateProfileString(Section, Key, Value, sb, 32, Path).ToString();           // Error occured!!
        return sb.ToString();
    }

它适用于vs2017而不是vs2008。 请。给我你的答案!

2 个答案:

答案 0 :(得分:0)

首先

您的 Visual Studio 版本通常不会对 Windows API 调用的兼容性产生影响。

其次

您正在调用 Windows CE

中不支持的 Windows API

<强>第三

INI 文件是一项旧技术,主要由配置文件取代,这是世界移动的方式

<强>最后

如果您确实需要读取和写入 INI 文件,只需下载一个开箱即用的 Nuget (它不依赖于Windows) API)并为自己省去了很多麻烦

答案 1 :(得分:0)

迈克尔·兰德尔在他的回答中提出了一些非常有效的观点,但是如果你正在编辑旧程序中的文件,ini处理程序仍然有用,对于简单的人类可读配置文件,ini确实很方便,在我看来;我发现xml在文本编辑器中实际打开以更改设置很糟糕,注册表设置与便携式设置完全相反。

所以,如果您需要的只是一个ini处理程序,几年前我为此编写了一个小型免费库,用于处理旧游戏的文件,该游戏使用ini格式进行所有设置和任务。

你可以在这里下载:
http://nyerguds.arsaneus-design.com/project_stuff/2013/nyerguds.ini/

镜:
http://www.mediafire.com/file/ldebjkppf59j13r/nyerguds.ini.zip

请注意,与大多数只搜索行并返回值的ini实现不同,这会将整个文件加载到内存中并将所有内容转换为对象,并跟踪修改的内容,因此它对于小配置很有用文件,建议不要将其用于更大的数据处理。不久之前,有些人在在线游戏系统中使用它来扫描一堆基于ini的格式的游戏地图的内容,结果发现速度很慢。

另请注意,它是text-encoding aware,默认为UTF-8,因此,如果您实际上正在阅读某些旧程序的设置,则可能需要将其设置为加载为Windows-1252,或者在DOS程序的情况下,DOS-437。由于我在制作此文件时使用的是DOS文件,因此该类提供了一个名为ENCODING_DOS_US的DOS-437静态预设快捷方式。