【问题标题】:cannot find pinvoke dll 'kernel32'找不到 pinvoke dll 'kernel32'
【发布时间】:2018-07-22 06:46:13
【问题描述】:

我想在使用 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。 请。给我你的答案!

【问题讨论】:

  • what should I do?。从格式化代码开始
  • 我有点怀疑GetPrivateProfileString 可以接受StringBuilder 作为参数...
  • @Nyerguds 你错了。这让 marshaler 作为 char* 调用者提供的缓冲区由被调用者填写。
  • 这个 API 早就被弃用了。使用本机 C# 代码处理 ini 文件。
  • @DavidHeffernan 哦,很有趣。谢谢。

标签: c# dll pinvoke kernel32 missingmethodexception


【解决方案1】:

首先

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

其次

您正在调用 Windows CE

不支持的 Windows API

第三

INI 文件是一项古老的技术,大部分被配置文件取代,这就是世界的发展方式

最后

如果你真的有读写INI文件的需求,只需要下载一个开箱即支持的Nuget(不依赖Windows API)并为您自己省去很多麻烦

【讨论】:

    【解决方案2】:

    Michael Randall 在他的回答中提出了一些非常有效的观点,尽管在我看来,如果您正在从旧程序编辑文件,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 的静态预设快捷方式。

    【讨论】:

      猜你喜欢
      • 2014-04-26
      • 2012-07-25
      • 2012-03-13
      • 1970-01-01
      • 1970-01-01
      • 2012-01-03
      • 1970-01-01
      • 1970-01-01
      • 2010-11-30
      相关资源
      最近更新 更多