使用mfc42.dll作为免费的注册COM?

我正在使用第三方Active-X控件,要求在用户的系统上安装某个版本的MFC42.dll。

我试图添加对我的产品的非pipe理员安装的支持,并不得不安装例如mfc42.dll到系统文件夹,并注册它显然使这是不可能的。

第三方Active-X通过使用清单文件被用作免注册的COM,我想知道是否可以对MFC42.dll和MSVCRT.DLL执行相同的操作并将它们存储在应用程序文件夹中? 有人试过这个?

这是不可能的。 MSVCRT和MFC42.dll不是COM对象,甚至是win32程序集,因此无法使用无reg的COM进行访问。

您可以安装mfc42.dll和msvcrt.dll应用程序本地。 系统将优先于系统32中的副本的应用程序目录。

(请参阅http://msdn.microsoft.com/en-us/library/ms682586(v=VS.85).aspx关于如何发生DLL绑定的完整细节)。

除了非常老的操作系统(Win2k之前)之外,您不需要安装这些DLL,因为在每个Windows版本上安装了最新的和二进制兼容的副本,直到Windows 7。

但是,即使您这样做,您仍然需要为您的ActiveX控件及其依赖的任何COM对象(例如代理/存根)合成免注册的COM清单。 SDK包含的工具可以帮助解决这个问题,但是如果您没有ActiveX控件的源代码,那么这个工具可能并不重要。 另外请注意,IE不能导致加载无reg的COM AX控件。 这只适用于其他AX主机,如ATL或MFC。

最后一点:您还应该努力避免依赖于构建在mfc42或msvcrt上的任何组件。 这些都是用VS工具集的一个非常旧的版本构建的,缺少许多重要的错误修复和安全更新。 而针对它们的VC6工具集(从1998年起)在相当长的一段时间内一直没有得到支持。

马丁