使用.calli IL-指令從.NET調用C++對象的方法時,如何解析指向您想要的實際方法的指針呼叫?我意識到這將取決於平臺。如何使用OpCodes調用指向C++對象的指針方法.Calli
我知道的優秀SharpDX庫使用.calli指令廣泛,我在它生成的代碼已經偷看和方法指針被拉出這樣的:
((void**)(*(void**)_nativePointer))[69]
其中_nativePointer是一個指向對象實例。然後將它轉換爲一個void **,這是一個引用,然後再次投射到一個無效**,該索引插入到槽69中。我只是無法弄清楚這裏究竟發生了什麼。
SharpDX並不是一個很好的例子,它調用了DirectX。它使用COM接口,你可能會看到它從v表中挖掘函數指針。理解COM如何工作遠遠超出了可能適用於SO答案的內容。關於它的很多書籍。 –