最近我一直试图从托pipe代码调用SystemParametersInfo方法,没有任何成功。
问题是,调用该方法后,该方法返回false (指示失败),但GetLastError (由Marshal.GetLastWin32Error()检索)为0 。
我试图从C ++调用方法作为一个testing(具有完全相同的参数),它从那里完全正常工作。
该方法的P / Invoke声明是这样的:
错误消息“指定的区域设置在此 *** 作系统上不受支持”。
比较墨迹序列化格式中的签名
如何尽可能以平台无关的方式从c ++中调用.NET
collections被修改; 枚举 *** 作可能不会执行
CLR在哪里安装?
[Dllimport("user32.dll",SetLastError = true)] [return: MarshalAs(UnmanagedType.Bool)] internal static extern bool SystemParametersInfo(SPI uiAction,int uiParam,ref STICKYKEYS pvParam,SPIF fWinIni); internal struct STICKYKEYS { public int cbSize; public int DWFlags; }
调用如下:
NativeMethods.STICKYKEYS stickyKeys = default(NativeMethods.STICKYKEYS); bool result = NativeMethods.SystemParametersInfo(NativeMethods.SPI.SPI_GETSTICKYKEYS,StickyKeysSize,ref stickyKeys,0); int error = Marshal.GetLastWin32Error();
SPI.SPI_GETSTICKYKEYS是0x003A (如MSDN上所示)。
这里的结果是false ,返回的错误是0 。
如果这很重要的话,这也是作为一个64位的可执行文件来编译的。
我完全是在智慧的结尾,你有什么想法,我可能做错了什么?
如何使用mono将.NET windows Service应用程序迁移到linux?
使用System.Security.Cryptography将Win32 Crypto API调用转换为C#
如何将文本文件的行添加到ListBox(C#)上的单个项目
使用C#从windows System32目录中删除文件
写一个mac的.net软件
正如GSerg指出的那样,我的问题是我需要直接作为参数传递结构体的大小,并作为我通过引用传入的结构体的cbSize成员。 正确的代码是:
int stickyKeysSize = Marshal.SizeOf(typeof (NativeMethods.STICKYKEYS)); NativeMethods.STICKYKEYS stickyKeys = new NativeMethods.STICKYKEYS {cbSize = stickyKeysSize,DWFlags = 0}; bool result = NativeMethods.SystemParametersInfo(NativeMethods.SPI.SPI_GETSTICKYKEYS,stickyKeysSize,0); if (!result) throw new System.ComponentModel.Win32Exception(); return stickyKeys;
总结以上是内存溢出为你收集整理的无法调用SystemParametersInfo全部内容,希望文章能够帮你解决无法调用SystemParametersInfo所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)