ATL或C#用于Windows shell /名称空间扩展?

时间:2010-03-22 20:19:34

标签: c# .net windows visual-c++ atl

我有一个问题, 在谷歌搜索和阅读文章分配了几个小时后,我明白Windows中的命名空间扩展非常tricky(至少在C ++中),现在我也看到它在C#中的possible,但是microsft没有正式确认使用.net进行命名空间扩展... 虽然我已经看到非常好的商业名称空间扩展框架,但没有一个是免费的....

所以我的问题:),我想开发自己的Namespace Extenssion,我有C ++ / C#knwoledge和基本的COM / ATL,但如果可以做到我更喜欢c#,那么c#inteop可以完全做好工作没有太多伎俩?或者应该在ATL潜水以创建必要的COM对象......

谢谢!

2 个答案:

答案 0 :(得分:5)

一般来说,直到现在,它已经是bad idea to write a shell extension in managed code。一个进程只加载一个版本的CLR,如果其他人首先选择了一个不同的版本,那么,你已经死了。

这可能会在不久的将来发生变化,但此时坚持使用shell扩展的本机代码。

答案 1 :(得分:3)

编辑:以下是关于此主题的一些官方消息:

http://msdn.microsoft.com/en-us/magazine/ee819091.aspx

请注意有关2.x及更高版本的代码如何在同一进程中与4.0共存的非常准确的信息。因此,虽然SxS是4.0的功能,但它对2.x用户有好处。

然而,有这样的规定:

  

具有多个能力   运行时与其他任何进程   运行时,我们现在可以提供一般性   支持编写托管shell   扩展 - 甚至是那些运行的扩展   在任意应用程序中进行处理   在机器上。我们仍然没有   支持使用编写shell扩展   早于.NET的任何版本   框架4因为那些版本的   运行时不加载进程   相互之间并将导致   在许多情况下失败。

所以还有一个额外的问题:explorer.exe进程不是托管shell扩展的唯一进程。任何具有“文件打开”对话框的程序都可能需要加载外壳扩展。因此,您的.NET 2.0-3.5扩展将无法在任何.NET 1.x应用程序的“文件打开”对话框中加载。它将与打印机驱动程序的GUI组件类似,它也会加载到显示标准打印机对话框的任何应用程序中。

因此,如果您想开发托管shell扩展,可以使用VS2010。