2011-09-27 145 views
0

我创建了一个32位的内置的dll文件(Project:win32应用程序,使用Visual Studio 2008的ATL和COM对象)。在赢得7 32位操作系统,注册我的DLL后,我在上下文菜单中获得“ABC”选项(右键单击)。现在我打算赢得7个64位操作系统。 Dll加载成功,但我没有得到“ABC”选项右键单击(在上下文菜单中)。任何人都可以请指出我出错或有什么建议吗?32位DLL不能在64位操作系统

注意:右键点击文件夹会出现“ABC”选项。

+0

如果在添加该选项的调用中出现代码错误,请使用检查上次错误并显示消息框? –

+1

它是一个shell扩展(是在资源管理器中显示的上下文菜单)?你编译它为64位?一个32位外壳扩展不能在Win64上运行。 – martinstoeckli

+0

是的,我使用shell扩展!当我“为64位编译”时,是的。但编译为32位时不工作...... @martinstoeckli可以解释为什么32bitdll不能在64位操作系统中工作。 – surendran

回答

3

为32位编译的外壳扩展只能在32位进程中运行。 64位Windows的Windows资源管理器是一个64位进程,因此它需要64位外壳扩展。

如果32位应用程序使用fileopen对话框(在64位Windows上),则该对话框需要32位外壳扩展。因此,我们建议您安装扩展这样的:

  • 的Win32:32位外壳扩展
  • Win64的:64位和32位Shell扩展

要做到这一点,你必须给不同的GUID的32位/ 64位外壳扩展。希望能让它更清楚一点。

编辑:正如雷蒙德建议,似乎你可以使用两个扩展名相同的GUID。

+3

实际上,您可以使用相同的GUID注册它们,因为有单独的32位和64位注册表。 32位应用程序将看到32位注册,而64位应用程序将看到64位注册。这使得在32位和64位应用程序之间的LNK可移植性成为可能。 –

+0

@Raymond Chen - 不知道这件事,我相信你需要不同的GUID'S。谢谢你的提示。 – martinstoeckli

+0

关键是要使用两个不同版本的Regsvr32.exe。使用c:\​​ windows \ syswow64 \ regsvr32.exe注册32位版本。 –

相关问题