unity的UnityEngine.dll中extern非static函数是什么道理??
上面截图来自UnityEngine.dll 的 Assetbundle类中的一个函数声明
请问个问题,正常extern的函数都是static的,但在unity的UnityEngine.dll中extern非static函数是什么道理??还有请问下 、这些属性分袂暗示什么意思的? 我最近也在研究Mono,似乎可以回答一下这个问题的一部分。
在Mono的C#代码中被标记了的函数的实现部分是在C++中的,需要使用mono_add_internal_call来添加C#函数和C++函数的对应关系,C++中的函数需要是static或者全局函数,但是C#中的函数并没有要求一定要static,我自己试了一下,非static函数会有一个默认参数,这个参数是MonoObject* 类型的,传递的应该是这个C#类的this引用,显式声明的参数都会在这个参数后面被传递,static函数就不会有这个默认的参数,个人觉得这个类似于lua中调用函数使用点还是冒号的区别。更多的东西我也还没有看到,回答的不对的地方还望指正,希望对题主有所帮助! Unity大部分功能都是C++实现的,C#的API只是一个wrapper。InternalCall表示这个函数的实现由runtime提供。
自己host mono runtime的话可以通过mono_add_internal_call把native实现注入进去。具体参考 http://www.mono-project.com/docs/advanced/embedding/
所以调用这些函数其实就是调用Unity的native API,代码是不会让你看到的。但是没有Unity源码又想搞清楚里面在干什么怎么办呢?其实有大招。
不知道为什么,Windows版的Unity附带了全套native代码的pdb,而且是private的,在安装目录就能找到。这样自己建一个Symbol Store,然后挂上WinDbg就可以开心地调试Unity的内部结构了。
页:
[1]