![]() |
1
3
使用
|
![]() |
2
3
编辑:我没有意识到这是一个API函数。不能声明返回结构的函数。p/invoke封送拆收器将使用cotaskmemfree()释放结构的内存。不起作用,它没有用cotaskmemalloc()分配。 XP和2003中的堆管理器可以原谅,它只是忽略了错误的发布请求。但不是Vista和2008中的程序,它会轰炸程序,因为它显然错误地使用了内存。重要的是,这些记忆恶作剧都是安全问题。 是的,通过将返回类型声明为intptr,可以避免p/invoke封送拆收器释放内存。这是适当的,API函数真的 做 返回指针,而不是结构。Marshal.ptrtoStructure需要将指向结构封送到托管结构。 安全API一般都是这样麻烦的。安全API将指针返回到内部内核安全结构的概念确实让人有点困惑… |
![]() |
Mike Bruno · 访问模拟帐户的私钥 7 年前 |
![]() |
John · 通过P/Invoke使用回调和堆对象的安全方法 8 年前 |
![]() |
Residuum · 带有P/Invoke和指针的泛型 9 年前 |
![]() |
hl3mukkel · 约束与使用SafeHandle的抽象类 9 年前 |