【发布时间】:2013-12-08 17:50:57
【问题描述】:
当使用 .calli IL 指令从 .NET 调用 C++ 对象的方法时,如何解析指向要调用的实际方法的指针?我意识到这将取决于平台。
我知道优秀的 SharpDX 库广泛使用 .calli 指令,并且我已经查看了它生成的代码,方法指针被拉出来是这样的:
((void**)(*(void**)_nativePointer))[69]
其中 _nativePointer 是指向对象实例的指针。然后将其转换为取消引用的 void**,然后再次转换为索引到插槽 69 的 void**。我只是无法弄清楚这里到底发生了什么。
【问题讨论】:
-
SharpDX 并不是一个很好的例子,它会调用 DirectX。它使用 COM 接口,您可能会看到它从 v-table 中挖掘出函数指针。了解 COM 的工作原理远远超出了 SO 答案的范围。很多关于它的书。