0

我需要在我的 C# 程序中使用 pinvoke 包装一个非托管函数。
有什么方法可以知道我在 C# 中的托管声明是否与本机声明匹配?
我注意到如果它不匹配,当我尝试调用它时,不会抛出任何执行,所以我不知道该函数是否真的被调用了。
(非托管功能来自第 3 方组件,因此我无法将其放入日志或更改它。)

4

2 回答 2

2

无法自动检查您的 p/invoke 声明是否与本机函数匹配。你有责任把它做好。

通常,如果你弄错了,就会引发异常。但不总是。

于 2013-10-16T07:25:25.037 回答
1

有时我会在我自己的非托管 DLL 中复制一个复杂的函数签名并对其进行测试,以准确了解 P/Invoke 如何编组参数。如果在托管项目中启用非托管调试,则可以从托管代码调试到非托管代码,这可以帮助您解决 P/Invoke 失败的原因。

于 2013-10-16T07:48:22.683 回答