如何在非托管c ++ dll中查找调用方程序集名称

我有一个非托管的c ++ DLL 。 我从c#(.net 3.5)调用这个非托管dll的外部方法

我正在寻找一种方法来找到女巫c#assembly正在调用我的非托管c ++ dll (进入我的c ++ dll)(至少,汇编名称)

当然, 我不想将任何其他参数传递给方法

提前致谢

这需要堆栈步行。 在托管代码中运行良好,这就是代码访问安全性的实现方式。 当有本地堆栈帧要走时,效果不好。 您可以在本机代码中尝试StackWalk64()。 昂贵且不太可能很好,特别是在.NET 4.0中,CLR不再伪造模块。 要非常警惕框架指针省略优化选项。

我会说,不要这样做。 简单地通过让托管代码传递额外的参数来解决它要容易得多。

最后我找到了解决方案。

我一直在寻找一种限制不允许访问我的非托管DLL的方法。 所以我抓住了我的调用者程序集位置的堆栈跟踪。

最后,我决定检查调用者程序集的公钥令牌(以这种方式找到)并validation它。

谢谢你的时间和答案……

你无法知道。 任何与C兼容的语言都可以调用您的外部方法,因此Windows和CRT不会对CLR语言进行额外的存储。