我编写了一个包含函数的C dll,该函数接受4个参数并返回一个数字。然后我创建了一个C#应用程序并使用PInvoke调用了dll函数。一切正常。然后我在dll函数中将参数从4更改为3.但是我没有在C#中更改方法签名(DllImport方法签名)。令我惊讶的是,调用仍然来自C#,但我从dll函数返回了一些意外的值。
我期待一个例外,但电话已经通过了。在使用P / Invoke进行函数调用时,有没有办法严格执行参数计数?
答案 0 :(得分:4)
无法强制参数计数匹配。你只需要做对。调用约定,参数类型等也是如此。
与托管代码不同,本机DLL没有描述必须如何调用它们的元数据。
如果启用p / invoke堆栈不平衡MDA,那么您至少可以检测到您在运行时所犯的错误。