GDI32.DLL API函数 MoveToEx 在C#2.0中的调用问题

LixingTie 2006-05-27 12:54:38
那位高手可否贴一段在C#2.0中调用 MoveToEx 函数的代码。谢谢
我在C#1.1中写了调用的代码,运行没问题,不知怎么的,在.Net2005中运行就出错,谁帮我看看。

private struct POINTAPI {
public int x;
public int y;
}

[DllImport("gdi32.dll")]
private static extern bool MoveToEx(IntPtr hDC,
int x,
int y,
POINTAPI lpPoint);

MoveToEx(hDC, 10, 10, ptsOld); //出错的地方在这里

这段代码在.Net2005中运行的时候出错 如下:
对 PInvoke 函数的调用导致堆栈不对称。原因可能是托管的 PInvoke 签名与非托管的目标签名不匹配。请检查 PInvoke 签名的调用约定和参数与非托管的目标签名是否匹配。
是怎么回事,是参数不正确吗?
...全文
487 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
LixingTie 2006-05-27
  • 打赏
  • 举报
回复
ptsOld参数是POINTAPI类型的
曲滨_銘龘鶽 2006-05-27
  • 打赏
  • 举报
回复
[DllImport("gdi32.dll")]
private static extern bool MoveToEx(IntPtr hDC,
int x,
int y,
ref POINTAPI lpPoint);
应该
tiaoci 2006-05-27
  • 打赏
  • 举报
回复
试试用ref 呢,这样:

private struct POINTAPI {
public int x;
public int y;
}

[DllImport("gdi32.dll")]
private static extern bool MoveToEx(IntPtr hDC,
int x,
int y,
ref POINTAPI lpPoint);

MoveToEx(hDC, 10, 10, ref ptsOld); //出错的地方在这里
kssys 2006-05-27
  • 打赏
  • 举报
回复
楼主的声明看来没错,那么应确认一下你的hDC是否IntPtr类型,还有10,10转换成int

MoveToEx(hDC, (int)10,(int)10, ptsOld)

/// API Declarations
private struct POINTAPI {
public int x;
public int y;
}

[DllImport("gdi32.dll")]
private static extern bool MoveToEx(IntPtr hDC,
int x,
int y,
POINTAPI lpPoint);
starj1 2006-05-27
  • 打赏
  • 举报
回复
帮顶,不懂
LixingTie 2006-05-27
  • 打赏
  • 举报
回复
我顶

110,538

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧