我正在努力确保优化我的托管到非托管呼叫。如果有任何非blittable类型意外地进入我的pinvoke调用,是否可以通过查看IL来快速查看?
我尝试在.dll中编写两个非托管函数,一个使用bool(非blittable)和一个使用int的函数。但是当我看到IL时,我没有看到任何不同的东西,让我知道它正在做一些额外的事情来整理布尔。
答案 0 :(得分:3)
IL中没有与编组有关的内容。相反,您应该按照MSDN中描述的规则分析方法的参数类型(使用修饰符)并返回类型。这些规则相当简单,应该可以编写一个自动检查器并将其插入例如的FxCop。
答案 1 :(得分:3)
Anton Tykhyy是对的。类型分析是您所需要的;通过IL搜索不会对你有所帮助。我建议您阅读以下文章,以确定您是否做得对。
希望它有所帮助。
答案 2 :(得分:2)
没有与编组相关的东西 在IL。
这不是真的。
即使对于'bool',也可能需要进行一些编组,具体取决于如何在非托管语言中定义'bool'。例如,在MS C ++中,有两种类型'bool'是1字节,'BOOL'是4字节。另一方面,我认为.Net bool是1个字节,所以你可能必须指定如何根据非托管bool的大小来编组它。