- android - RelativeLayout 背景可绘制重叠内容
- android - 如何链接 cpufeatures lib 以获取 native android 库?
- java - OnItemClickListener 不起作用,但 OnLongItemClickListener 在自定义 ListView 中起作用
- java - Android 文件转字符串
好的,所以我已经按照文档一直到最小的细节,当我尝试调试和运行 (F5) 时,它一直给我以下错误:
PInvokeStackImbalance was detected Message: A call to PInvoke function 'VistaControls!VistaControls.Dwm.NativeMethods::DwmExtendFrameIntoClientArea' has unbalanced the stack. This is likely because the managed PInvoke signature does not match the unmanaged target signature. Check that the calling convention and parameters of the PInvoke signature match the target unmanaged signature.
我不知道这是什么意思,也不知道如何解决!有人可以帮忙吗?有什么建议吗?
我以前用过这个,但这次没用。我正在使用 VS2010 Express C# WinForms、.NET 4(就像我很久以前第一次使用它时一样。)
谢谢
是的,我注意到有人在那个页面的底部做了更正,我修复了它,但它仍然不起作用!
代码:
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using VistaControls.Dwm;
namespace One_Stop_Management
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
protected override void OnPaint(PaintEventArgs e)
{
base.OnPaint(e);
e.Graphics.FillRectangles(Brushes.Black, new Rectangle[] {
new Rectangle(0, 0, this.ClientSize.Width, 30),
new Rectangle(this.ClientSize.Width - 30, 0, 30, this.ClientSize.Height),
new Rectangle(0, this.ClientSize.Height - 30, this.ClientSize.Width, 30),
new Rectangle(0, 0, 30, this.ClientSize.Height)
});
}
protected override void OnLoad(EventArgs e)
{
base.OnLoad(e);
VistaControls.Dwm.DwmManager.EnableGlassSheet(this);
}
}
}
最佳答案
通过恢复到 .NET 3.5,您只是隐藏了问题:堆栈不平衡仍然存在,您只是没有从负责检测正确的 P/Invoke 调用的托管调试助手那里得到任何异常,原因不明对我来说。
“Windows 窗体 Aero”库中 DwmExtendFrameIntoClientArea
的签名错误。
这是原始的非托管签名:
HRESULT WINAPI DwmExtendFrameIntoClientArea(HWND hWnd, __in const MARGINS *pMarInset);
这是库中的签名:
[DllImport("dwmapi.dll", PreserveSig = false)]
public static extern int DwmExtendFrameIntoClientArea(IntPtr hWnd, ref Margins pMarInset);
虽然乍一看它似乎与非托管的相匹配,但事实并非如此。 PreserveSig = false
告诉 CLR 解释返回的 HRESULT 并在它对应于错误时自动抛出异常(参见 PreserveSig on MSDN )。函数返回类型必须是 void
而不是 int
,因为运行时已经从堆栈中消耗了结果。
在库代码中更改为PreserveSig = true
,堆栈不平衡将消失。
关于c# - Windows Aero 窗体错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5050526/
对于一个科学实验,我写了一个turtle.py ,它会打开一个 800x480 的窗口并绘制一个缓慢增长的黑点。 turtle.py以 C:\Users\kaza>python C:\Users\ka
我开发了一个 swing 应用程序,但每次运行应用程序时都会打开一个新窗口。我希望如果一个窗口已经打开,则其他窗口不允许打开。 最佳答案 Here是一个 Java 单一应用实例的例子: A singl
有没有办法检测主进程中 Electron 的结构? process.platform 似乎也在 x64 机器上返回 win32,我没有在文档中找到任何获取架构的选项。 最佳答案 你试过 process
public short[] HanningWindow(short[] signal_in ,int pos ,int size) { for (int i= pos; i < pos+si
我有一个具有这些属性的 Electron 窗口: mainWindow = new BrowserWindow({ width: 800, height: 600, title: "Aqu
我有一个 Ubuntu 工作站,我正在尝试引导一个 Windows 节点。 Windows 节点在端口 2222 上打开了 ssh。我一直在关注 http://docs.opscode.com/plu
我是一名优秀的程序员,十分优秀!