为什么WritePrivateProfileString返回0?

xar*_*ria 2 .net c# winapi ini dllimport

在我的C#应用​​程序中,我希望更新INI文件中的值.我使用了互操作服务并希望使用该功能WritePrivateProfileString.所以我导入了这样的DLL:

[DllImport("KERNEL32.DLL", EntryPoint = "WritePrivateProfileStringW",
           SetLastError = true,
           CharSet = CharSet.Unicode, ExactSpelling = true,
           CallingConvention = CallingConvention.StdCall)]
private static extern int WritePrivateProfileString(
            string lpAppName,
            string lpKeyName,
            string lpString,
            string lpFilename);`
Run Code Online (Sandbox Code Playgroud)

并在我的函数中使用它像这样:

int result = WritePrivateProfileString(category, key, value, iniFile);
Run Code Online (Sandbox Code Playgroud)

但结果为0且INI文件未更新.我该如何检查错误?

Dav*_*nan 5

调用.NET等效于Win32 API函数GetLastErrorFormatMessage,系统会告诉你为什么它不会让你做到这一点.

Cody可能正确地猜测它与UAC有关,但是如果不知道你在哪里写这个文件,我们只能猜测.

更新

正如我在评论中向我解释的那样,Marshal.GetLastWin32Error.NET方法是获取错误代码而不是GetLastError直接调用.GetLastError直接调用将返回最新调用Win32 API的错误代码,这可能是从.NET运行时调用Win32而不是P/Invoke.