.NET Framework源代码的问题

zzPandazz 2011-01-19 10:45:18


[MethodImplAttribute(MethodImplOptions.InternalCall)]
private unsafe static extern Array InternalCreate(void* elementType,int rank,int *pLengths,int *pLowerBounds);

这样的外部调用要怎么查到他的实现?
是不是一定都在ECall里?
...全文
104 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
zzPandazz 2011-01-19
  • 打赏
  • 举报
回复
我发现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


不过这只是我的猜想,刚研究这方面的东西,不敢确定
rczjp 2011-01-19
  • 打赏
  • 举报
回复
哦,那只要看cpp文件有什么方法就OK了把
zzPandazz 2011-01-19
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 rczjp 的回复:]
dumpbin?
[/Quote]
在看sscli的源码,从Framework到vm的源代码都有,但是C#的代码很多都是extern调用底层的,vm里面是一大堆的*.h和*.cpp文件,其实我是想要找一个更好的查看extern调用之下的函数的方法
rczjp 2011-01-19
  • 打赏
  • 举报
回复
dumpbin?
zzPandazz 2011-01-19
  • 打赏
  • 举报
回复
问题已经解决了,果然弄错了很多东西,comstring的Equals已经没有了,全部在C#那层实现,Object的Equals才是外部调用,而且名字是InternalEquals,就是只调用一个ObjectNative::Equals而已

110,539

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧