c#调用 Win32Api之错误处理

来源:互联网 发布:企业名录数据库 编辑:程序博客网 时间:2024/05/19 11:49

问题:使用c#调用win32 Api时,在32位win7下执行正常。win10 64位下执行无效,不报错。

源代码:

 public static void SetWndLong() {    Help.DebugWrite(this, "EditPWDWindow...");   Help.DebugWrite(this, "Style Chenge...{0}", Style);   Style &= ~Win32Api.ES_PASSWORD;   //Win32Api.SetWindowLong(HWnd, Win32Api.GWL_STYLE, Style);               this.RunApi(() => Win32Api.SetWindowLongPtr(HWnd, Win32Api.GWL_STYLE, Style));    Help.DebugWrite(this, "Style Chenge.[{0}[{1}]", Style, Win32Api.GetWindowLong(pHWnd, Win32Api.GWL_STYLE)); } public static void RunApi(this object o, Action run) {  run();  Help.DebugWrite(null, Help.LongToString(Marshal.GetLastWin32Error(),"err"));             }

win7 32位结果如下:

121032.8284    tId[ 1]    o[0x116f450,18281552D]    Style Change...1073807520121032.8284    tId[ 1]    err0x  5,  5D121032.8284    tId[ 1]    o[0x116f450,18281552D]    Style Change.[1073807488][1073807520][0]

结果显示SetWindowLong并未生效。

解决方案:在win10下使用管理员权限运行visual studio 2017。尽管输入显示未更改,但实际已经可以通过SetWindowText改变Edit内容。