我的代码是管理还是不管理?

时间:2012-11-12 10:39:42

标签: c# .net .net-assembly

我正在开发一个迄今为止100%管理的.NET库。现在我需要使用一些win32调用。

我需要知道的是什么时候是一个名为unmanaged的.NET库?当程序集有非托管代码或程序集中的非托管代码被执行时?

2 个答案:

答案 0 :(得分:2)

只要您的代码在进行这些非托管的win32调用后正确清理,那么您的库将被管理。

答案 1 :(得分:2)

您认为您正在编写100%托管代码,但实际上如果您深入研究.NET框架的内容,即使调用非托管代码也是如此。尝试使用ILSpy.NET Reflector查找DllImport或extern方法调用。程序集本身是受管理的,因为.NET正在执行所有JITing,安全性,垃圾收集等。到程序集中的对象。在.NET调用非托管函数(Win32等)时,.NET不再能够控制代码,因此这是不受管理的!

最好学习如何“管理”非托管代码导入。您应该包装可互操作的调用,以便在完成可互操作的调用后,.NET可以尽可能地进行清理。

请查看有关如何使用Platform Invoking的信息:

http://msdn.microsoft.com/en-us/library/aa288468%28v=vs.71%29.aspx