编程语言
首页 > 编程语言> > c# – 为什么我不能通过pinvoke让GetPrivateProfileString工作?

c# – 为什么我不能通过pinvoke让GetPrivateProfileString工作?

作者:互联网

运行我在64位Vista上编写的c#控制台应用程序.这是代码:

class Class1
{
    static void Main(string[] args)
    {
        Debug.Assert(File.Exists(@"c:\test.ini"));
        StringBuilder sb = new StringBuilder(500);
        uint res = GetPrivateProfileString("AppName", "KeyName", "", sb, sb.Capacity, @"c:\test.ini");
        Console.WriteLine(sb.ToString());
    }
    [DllImport("kernel32.dll")]
    static extern uint GetPrivateProfileString(string lpAppName, string lpKeyName, string lpDefault, StringBuilder lpReturnedString, int nSize, string lpFileName);
}

我相信我会得到一个很大的“DUH!”作为答案,但我不明白为什么这不起作用.除了Debug.Assert之外,此代码是从this page处的c#示例中删除的

解决方法:

这一天也一直在破坏我的排骨.我想我找到了一个解决方法,我真的不想处理它:在.ini文件的第一个节头之前插入一个空行.现在运行您的应用程序,看看您是否开始看到您期望的值.

考虑到这个错误显然已存在多年,我很惊讶MS现在还没有解决它.但是,几年前.ini文件应该已经消失了.这当然很有趣,因为MS使用很多地方.ini文件(例如desktop.ini).但我认为MS知道这个错误,因为我注意到我的desktop.ini文件包含一个前导空行.嗯…

标签:c,64bit,pinvoke,windows-vista
来源: https://codeday.me/bug/20190527/1159841.html