Articles of 32位 64位

在64位机器上编译32位代码时,应该如何处理“从void *'强制转换为”int“会失去精度?

我有一个在32位机器上编译和正常工作的软件包。 我现在试图让它在64位机器上编译,并find以下错误 – error: cast from 'void*' to 'int' loses precision 是否有一个编译器标志来抑制这些错误? 还是我必须手动编辑这些文件,以避免这些强制转换?

编译用于64位系统上的32位系统崩溃的C#程序和C ++ DLL

我有一个C#应用程序,使用DLL,因为我需要C ++来访问一些非托pipe的user32 APIfunction(我不能使用PInvoke)。 我编译的应用程序和DLL的x86体系结构,一切工作正常的Windows 7 32位。 现在的问题是,在Windows 7 64位,当我尝试使用依赖于DLL的function(但其余的工作正常),应用程序崩溃。 我怀疑这是一个32/64位的问题,所以我试着重新编译x64体系结构的DLL,现在我可以在运行时select在x86和x64之间加载哪个DLL。 但是,当我尝试使用依赖于DLL的function时(这是有道理的,因为我尝试将64位DLL加载到32位程序中),但它仍然崩溃。 我还没有尝试编译应用程序和x64的DLL。 我怀疑它会起作用,但要求我有两个不同的安装者,我不想去那里。 任何线索?

单个MSI安装正确的32位或64位C#应用程序

我有一个为x86(32位)和x64(64位)平台构build的C#应用​​程序。 我的构build系统目前输出两个MSI安装程序,每个平台一个。 如果它有所作为,我的C#应用​​程序包含一个Windows任务栏工具栏,这意味着安装的DLL必须由explorer.exe进程加载。 是否有可能生成一个单一的MSI安装程序,将安装我的应用程序的正确版本取决于当前的操作系统是否是一个64位的操作系统? 目前已经通过使用http://dotnetinstaller.codeplex.com/产生一个执行体系结构检查然后启动正确的MSI的EXE来实现。 不过,我更喜欢纯粹基于MSI的方法。

如何从32位进程读取64位registry项?

我一直使用来自HKEY_LOCAL_MACHINE\Software\Microsoft\Cryptography的关键MachineGuid的值来唯一标识主机,但是在64位计算机上运行的32位进程中,该值似乎丢失。 我想这是在Wow6432Node,它确实缺less的地方search。 根据这个,你应该能够通过添加一个标志来正确的键,但是下面的代码仍然不能完成这项工作。 我错过了什么? const KEY_WOW64_64KEY=$0100; var r:HKEY; s:string; i,l:integer; begin //use cryptography machineguid, keep a local copy of this in initialization? l:=40; if RegOpenKeyEx(HKEY_LOCAL_MACHINE,PChar('Software\Microsoft\Cryptography'), 0,KEY_QUERY_VALUE,r)=ERROR_SUCCESS then begin SetLength(s,l); if RegQueryValue(r,'MachineGuid',PChar(s),l)=ERROR_SUCCESS then begin SetLength(s,l); RegCloseKey(r); end else begin //try from-32-to-64 RegCloseKey(r); if RegOpenKeyEx(HKEY_LOCAL_MACHINE,PChar('Software\Microsoft\Cryptography'), 0,KEY_QUERY_VALUE or KEY_WOW64_64KEY,r)=ERROR_SUCCESS then begin l:=40; if RegQueryValue(r,'MachineGuid',PChar(s),l)=ERROR_SUCCESS then SetLength(s,l) else l:=0; […]

在32位Windows XP上的Wow64DisableWow64FsRedirection

我正在用Visual Studio C ++编写一个程序,它需要在任何运行Windows XP 32位或更高版本的Windows操作系统的计算机上以本地方式运行32位进程。 该程序需要能够访问计算机上的C:\Windows\system32\文件夹,而不pipe程序是在64位还是在32位系统上运行。 为此,我使用Wow64DisableWow64FsRedirection来禁用Windows通常对32位进程的redirect,并将它们发送到C:\Windows\syswow64 。 不幸的是,这破坏了兼容性 – 虽然我的程序可以在Server 2003和XP x64版本上运行,但程序在32位XP RTM系统上运行时会失败,给我这个错误: [Program Name] – Entry Point Not Found The procedure entry point Wow64DisableWow64FsRedirection could not be located in the dynamic link library KERNEL32.dll. 由于系统是32位的,调用显然是多余的,但我无法想出一个方法来确定在运行时系统是否是64位,因此是否跳过调用,而不添加另一个调用本身打破了兼容性,如需要XP Service Pack 2的IsWow64Process() 。 tl; dr:如何在不使用消费者64位Windows出现之后引入的任何调用的情况下,如何确定系统是64位还是32位。

有没有办法在32位计算机上执行64位程序?

只是一个简单的问题:有没有办法在32位机器上运行64位Windows环境下编译的程序(使用mingw64)? 任何DLL或任何兼容层,我可以使用?

什么是32位和64位c + +代码?

我试图从registry项中获取一个值,最终的程序必须在32位和64位的机器上工作。 目前的代码是: HKEY hKey; LONG Result1; LONG result2; Result1 = RegOpenKeyEx(HKEY_CLASSES_ROOT,L"Word.Application\\CurVer",0,KEY_READ,&hKey); cout << Result1; cout << "\n"; TCHAR value[255]; DWORD BufferSize = 255; result2 = RegGetValue(hKey, L"Word.Application\\CurVer", L"", RRF_RT_ANY, NULL, (PVOID)&value, &BufferSize); cout << result2; 我从RegGetValue得到了错误'2',并且看到这个RegOpenKeyEx / RegGetValue返回ERROR_FILE_NOT_FOUND,它存在于表示在64位操作系统上'32位代码'不起作用,但我不明白这是什么意思 它是必须为不同的体系结构编译的程序,还是RegGetValue特定于32位? 对不起,我的大部分C ++编程都是在64位计算机成为主stream之前完成的,而我之前编写的偶尔的项目都没有遇到这个问题。

在Windows 7 64位中使用32位shell扩展

我想开发一个兼容Windows XP SP2(32位)和Windows 7 64位的shell扩展(上下文菜单处理程序)。 是否可以在64位Windows中运行32位shell扩展,或者必须将外部扩展移植/重build为64位才能在Windows 7 64位中使用? 在64位操作系统中使用32位shell扩展是否存在任何缺点/已知问题? 32位应用程序在64位Windows上运行得很好,但我不确定shell扩展,因为如果我的理解是正确的,shell扩展是在proc COM服务器加载到资源pipe理器进程,这应该是一个64-在64位Windows中进行64位处理…或者是为在64位操作系统中运行的32位shell程序提供的“32位仿真”的一种forms?