![]() |
1
1
鼠标事件签名应该是这样的
|
![]() |
2
2
鼠标事件定义为:
winapi表示stdcall,dword表示uint,ulong_ptr表示uint ptr。所以正确地说应该是:
问题是long在c中定义为64位,而(u)int是32位。(U)Intptr是32位或64位,这取决于操作系统的位。 编辑:换句话说,您向函数传递的数据太多了。由于被调用方清理堆栈,PInvoke注意到并非所有内容都已从堆栈中删除。它是为您做的(但是您传递了错误的数据,因此函数可能做了与您想要的不同的事情),并警告您。 |
![]() |
3
2
有一个 许多 因特网上错误的P/Invoke声明。他们通常是在VB6中开始生活的。在这种语言中,整数是16位,长是32位。回到在16位操作系统上运行的vb1。它们在vb.net或c中不能正常工作。 堆栈不平衡MDA专门设计用于捕获这样的错误声明,但它是一个选项(调试+异常)。如果只有一个参数或者传递了大量的零,那么实际的调用就会工作。不幸的是,代码在调用后保持正常运行的可能性也不坏。当方法返回时,堆栈指针值会自动更正。不过,你可能会遇到一些非常棘手的问题。 |
|
Robert King · Unity C#语法问题-转换位置 1 年前 |
![]() |
JBryanB · 如何从基本抽象类访问类属性 1 年前 |
|
law · 检查答案按钮的输入字符串格式不正确 2 年前 |
![]() |
i_sniff_ket · 在unity之外使用unity类 2 年前 |