日期:2014-05-17  浏览次数:21083 次

请检查 PInvoke 签名的调用约定和参数与非托管的目标签名是否匹配
 [DllImport("gdi32.dll", CallingConvention = CallingConvention.Cdecl)]
        public static extern int SetPixel(IntPtr hdc, int x, int y,int color);
对 PInvoke 函数“c sharp计算机图形学!c_sharp计算机图形学.Form1::SetPixel”的调用导致堆栈不对称。原因可能是托管的 PInvoke 签名与非托管的目标签名不匹配。请检查 PInvoke 签名的调用约定和参数与非托管的目标签名是否匹配。
这是怎麽回事 就剩这一个问题了 急!!!!!

------解决方案--------------------
[DllImport("gdi32.dll")]
static extern uint SetPixel(IntPtr hdc, int X, int Y, uint crColor);
就可以了

[DllImport("gdi32.dll", CallingConvention = CallingConvention.Cdecl)]
这个不对,所有的API都是StdCall的。
------解决方案--------------------
这是标准的win32api,对于这样的api里可以去下一个工具查询 api explorer

当然如果不愿意下工具,则可以去pinvoke.net直接搜索
比如你的这个api搜索出来的结果:http://www.pinvoke.net/default.aspx/gdi32/SetPixel.html
------解决方案--------------------
引用:
这是标准的win32api,对于这样的api里可以去下一个工具查询 api explorer

当然如果不愿意下工具,则可以去pinvoke.net直接搜索
比如你的这个api搜索出来的结果:http://www.pinvoke.net/default.aspx/gdi32/SetPixel.html

哈哈,我就是从pinvoke粘贴来的。事实上,只要用几个关键字,就可以在google中找到,比如"SetPixel extern dllimport"