Windows Vista x64

Dec 11, 2007 at 12:15 PM
Does it work under Windows Vista x64? I've installed it but an icon of the extension didn't show up.
Developer
Dec 11, 2007 at 5:40 PM
I don't believe we tested it for 64-bit, but it might work. It would need to be recompiled for 64-bit, though.
Mar 24, 2008 at 10:38 AM
For those who intend to get it working under x64 I discovered two issues which must be fixed
1) The manifest is composed to use the 32-bit version of comctl32.dll. You must either change the processorArchitecture attribute to "amd64" or you may use the preprocessor pragmas to use the right version of the DLL, like this

#if defined _M_IX86
#pragma comment(linker,"/manifestdependency:\"type='win32' name='Microsoft.Windows.Common-Controls' version='6.0.0.0' processorArchitecture='x86' publicKeyToken='6595b64144ccf1df' language='*'\"")
#elif defined _M_IA64
#pragma comment(linker,"/manifestdependency:\"type='win32' name='Microsoft.Windows.Common-Controls' version='6.0.0.0' processorArchitecture='ia64' publicKeyToken='6595b64144ccf1df' language='*'\"")
#elif defined _M_X64
#pragma comment(linker,"/manifestdependency:\"type='win32' name='Microsoft.Windows.Common-Controls' version='6.0.0.0' processorArchitecture='amd64' publicKeyToken='6595b64144ccf1df' language='*'\"")
#else
#pragma comment(linker,"/manifestdependency:\"type='win32' name='Microsoft.Windows.Common-Controls' version='6.0.0.0' processorArchitecture='*' publicKeyToken='6595b64144ccf1df' language='*'\"")
#endif


2) In the XMLDocument::Load method, there's a small pointer compatibility problem, causing passing a pointer to a 64bit value where a pointer to a 32bit value is expected. All you need to do is change the type of the local variabla "cch" from size_t to DWORD.

That's it. May be there are some other 64/32bit pointer compatibility issues, but I've not been confronted with them yet.
Oct 12, 2009 at 6:38 PM
Edited Oct 12, 2009 at 6:42 PM

Hi guys,

I noticed this thread is over a year old, but I am trying to compile from source for Windows 7 x64 and not having a great amount of luck. Bear with me, i'm only a web developer and scripter and don't have a lot of experience in C(++/#) coding but I can recognize syntax and have a very basic understanding of pointers and methods and whatnot.

I have compiled things in Visual Studio before, although this is the first time I've tried to compile for a 64-bit machine. The last post by juraj seems to cover everything, I have also read articles on 64-bit porting such as the CodeProject C++ 64-bit article here however I encounter errors when trying to register the RegNameSpace DLL.

I am running Visual Studio 2008 with the Windows SDK v7.0 (for Windows 7 x64) integrated. That may be part of the issue. Anywho, in reference to the guide I mentioned above, I have did not find any issues with pointer length and 32>64-bit compatibility (via a recursive Find Text In Files command in UltraEdit) apart from that single size_t variable, so I'm sure it's the architecture setting that I can't figure out. If I simply change my Configuration by copying the Win32 to x64 architecture as outlined on this MSDN article I get the same 'This DLL is not for 64-bit architecture' message or whatever it is when trying to register it. Fair enough, I take it that changing the "processorArchitecture attribute" is more than that. So taking that code you posted juraj and inserting it after (and I tried before) the #pragma once line in stdpch.h under the RegLib project, seems to build a correct x64 DLL. However, I get this error in Event Log:

Activation context generation failed for "S:\Storage\Software - Windows 7\Registry Shell Namespace Extension\RegNamespace_x64\RegNamespace\x64\Release\RegNamespace.dll".
Error in manifest or policy file "" on line .
A component version required by the application conflicts with another component version already active. Conflicting components are:.
Component 1: C:\Windows\WinSxS\manifests\amd64_microsoft.windows.common-controls_6595b64144ccf1df_6.0.7600.16385_none_fa645303170382f6.manifest.
Component 2: C:\Windows\WinSxS\manifests\x86_microsoft.windows.common-controls_6595b64144ccf1df_6.0.7600.16385_none_421189da2b7fabfc.manifest.

I understand that it's basically conflicting between the 32-bit and 64-bit comctl32.dll but I have no idea how to resolve it =(  My not-so-educated guess is that these "preprocessor pragmas" should be put somewhere else instead...? If someone could give me a tip or has any ideas, I'd be very grateful - I have missed using this extension since moving from Vista 32-bit to 7 64-bit very much. I have subscribed to this thread via E-Mail and look forward to replies.

Thank you for the great explorer extension you've created.

Oct 13, 2009 at 7:22 AM

Hi,

try my version of the project which is working fine under Vista x64.

You will find the project files here:

http://rapidshare.com/files/292340133/RegNamespace_x64.zip.html

However, in this project I hardcoded the processor architecture in the manifest file and I didn't use pragmas.
But for you just in order to verify whether it's working or not, it should be sufficient that way.

Juraj

 

 

Oct 13, 2009 at 8:18 AM

Hi Juraj,

The solution converted to VS2008 fine and built successfully after switching the active config from Debug to Release. I recieved an error from WixSetup but of course that was not a critical error, and the built RegNamespace.dll in your copy requires elevation before registering. But both DLL's regsvr32'd fine and I now have the icon successfully visible on my desktop :)

Thanks very much for sharing Juraj! Have you (or the developers) considered making a commit to provide x64 support out of the box? It'd be a good thing to do sometime in the future. Thanks again!