编程语言
首页 > 编程语言> > 如何在C#中使用PInvoke强制对dll函数进行参数计数

如何在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