像[MethodImplAttribute(MethodImplOptions.InternalCall)]
private unsafe static extern Array InternalCreate(void* elementType,int rank,int *pLengths,int *pLowerBounds);这样的外部调用要怎么查到他的实现?
是不是一定都在ECall里?

解决方案 »

  1.   

    在看sscli的源码,从Framework到vm的源代码都有,但是C#的代码很多都是extern调用底层的,vm里面是一大堆的*.h和*.cpp文件,其实我是想要找一个更好的查看extern调用之下的函数的方法
      

  2.   

    哦,那只要看cpp文件有什么方法就OK了把
      

  3.   

    我发现ecall.cpp真的可能是所有上层调用的一个关口,里面用了一大堆的宏,微软好喜欢用宏,好像是上层的函数不管属于哪一个类只要函数名和ecall里的签名相同,都会在ecall里被映射到真正实现它的底层的某个C++类的某个函数去,很多最后还是调用了C++标准库比如说如果有一个public extern Equals(string value);
    它的调用顺序就是
    string.cs的Equals --> ecall.cpp的FCFuncElement("Equals", ReflectionEnum::InternalEquals) --> reflectioninvocation.cpp的ReflectionEnum::InternalEquals --> ecall.cpp的FCFuncElement("InternalEquals", ObjectNative::Equals) -->comobject.cpp的ObjectNative::Equals --> string.h的memcmp
    不过这只是我的猜想,刚研究这方面的东西,不敢确定
      

  4.   

    问题已经解决了,果然弄错了很多东西,comstring的Equals已经没有了,全部在C#那层实现,Object的Equals才是外部调用,而且名字是InternalEquals,就是只调用一个ObjectNative::Equals而已