确定调用非托管代码的.NET程序集

时间:2013-02-13 17:56:02

标签: .net clr unmanaged managed

我有.NET程序集,它用C语言编写的非托管DLL调用函数(没有CLR支持)。有没有办法非托管DLL可以确定哪个程序集调用其代码?我正在寻找方法而不在非托管DLL中启用CLR支持。

1 个答案:

答案 0 :(得分:1)

不,您无法在本机代码中安全地执行堆栈行走。这只能在托管代码中实现,它提供了堆栈框架布局保证。垃圾收集器和CAS检查所需。 C编译器具有删除此类保证的优化器。它们可能因为语言不支持也不需要堆栈行走。

即使你对优化器进行了调整,你仍然会遇到很大的障碍,即走过pinvoke marshaller的堆栈帧并将实时生成的机器代码的猜测地址映射到一个程序集。只有CLR知道如何做到这一点。你无法做到这一点。