我的代码是托管的还是非托管的?

3
我正在开发一个完全托管的.NET库。现在我需要使用一些win32调用。
我想知道什么时候.NET库被称为非托管?是当程序集包含非托管代码还是当程序集中的非托管代码被执行时?

2
个人而言,我不会过于纠结于命名规范,但是:如果你在调用非托管代码(除了提供契约级别抽象的BCL之外),你不能真正称其为100%托管。 - Marc Gravell
从这个角度来看:无论你在.NET中使用什么功能 - 迟早它都会调用一个Win32函数 - 只要确保清理你使用的每个外部资源,不要太在意命名问题(顺便说一下:我不明白,为什么这很重要?)。 - Random Dev
可能是重复的问题 https://dev59.com/_HRC5IYBdhLWcg3wVvUt - tempidope
2个回答

2
只要您的代码在进行这些非托管Win32调用后正确清理,那么您的库就是托管的。

2
你认为你正在编写100%托管代码,但实际上如果你深入研究.NET框架,即使是那些调用非托管代码的部分也会涉及到非托管代码。尝试使用ILSpy.NET Reflector查找DllImport或extern方法调用。程序集本身是受托管的,因为.NET正在执行程序集中对象的所有JITing、安全性、垃圾回收等操作。当.NET调用一个非托管函数(如Win32)时,.NET不再对代码具有控制权,因此这被视为非托管的!

学习如何“管理”非托管代码导入是个好习惯。你应该包装可互操作的调用,以便.NET可以在可互操作的调用完成后清理尽可能多的内容。

请参阅此处的信息,了解应如何使用平台调用:

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


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接