Find centralized, trusted content and collaborate around the technologies you use most.
Teams
Q&A for work
Connect and share knowledge within a single location that is structured and easy to search.
我需要在我的 C# 程序中使用 pinvoke 包装一个非托管函数。 有什么方法可以知道我在 C# 中的托管声明是否与本机声明匹配? 我注意到如果它不匹配,当我尝试调用它时,不会抛出任何执行,所以我不知道该函数是否真的被调用了。 (非托管功能来自第 3 方组件,因此我无法将其放入日志或更改它。)
无法自动检查您的 p/invoke 声明是否与本机函数匹配。你有责任把它做好。
通常,如果你弄错了,就会引发异常。但不总是。
有时我会在我自己的非托管 DLL 中复制一个复杂的函数签名并对其进行测试,以准确了解 P/Invoke 如何编组参数。如果在托管项目中启用非托管调试,则可以从托管代码调试到非托管代码,这可以帮助您解决 P/Invoke 失败的原因。