如何在C#中使用PInvoke强制对dll函数进行参数计数
作者:互联网
我写了一个C dll,其中包含一个接受4个参数并返回数字的函数.然后,我创建了一个C#应用程序,并使用PInvoke调用了dll函数.一切正常.然后,我没有将dll函数中的参数从4更改为3.但是我没有在C#中更改方法签名(DllImport方法签名).令我惊讶的是,该调用仍然可以从C#成功执行,但是从dll函数返回了一些意外的值.
我期待一个例外,但电话接通了.使用P / Invoke进行函数调用时,是否有任何方法可以严格执行参数计数?
解决方法:
无法强制参数计数匹配.您只需要正确处理即可.调用约定,参数类型等也是如此.
与托管代码不同,本机DLL没有描述它们如何调用的元数据.
如果启用p / invoke堆栈不平衡MDA,则至少将能够检测到运行时发生的错误.
标签:c,net,pinvoke 来源: https://codeday.me/bug/20191031/1972748.html