问题标签 [win64]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
121 浏览

perl - 当我使用 Prove -v 终止一个垂死的 Perl 测试运行时,为什么没有通过 STDOUT 将结果保存到文本文件中?

我正在驾驶 SeleniumRC 并且页面挂起,所以我按 Ctrl-C 停止测试并解决问题。如果我通过命令行传递一个 txt 文件,如下所示:

...我要么一无所获,要么在文本文件中得到“终止批处理作业(Y/N)?”。请注意,如果我没有通过命令行传递文件以进行输出,则结果会按预期滚动。

证明是否可以选择通过不是-v的标准输出写入文件?

$| = 1;当我将其任何形式添加到prove.pmor 或时,此问题仍然存在some.t。证明或测试::线束中是否有覆盖我的自动刷新设置的东西?

我也尝试过这种变化: prove -v some.t > testresults.txt :: data.csv

0 投票
3 回答
32973 浏览

python - 如何在 Windows 上并排安装 Python 2.7.3 32 位和 64 位

我有 Windows Vista 64。

我有一些需要 Python 2.7.3 64 位的项目和其他需要 Python 2.7.3 32 位的项目(因为某些扩展在 64 位中不起作用)。

如何防止 Python 2.7.3 MSI 安装程序(32 或 64 机器人)删除其他版本。

使用 Python 2.7.2 并肩为我工作没有问题。

0 投票
1 回答
921 浏览

c# - 自动化/WinAPI 在 64 位和 32 位应用程序之间调用

我们在 2 个应用程序之间有一个自动化场景(主要是 MSUIA),目标是 32 位,我的应用程序(自动化应用程序)是 64 位,在 64 位 win7 上。一些需要共享的信息必须通过 direkt Win SDK 调用(如 SendMessage、GetFocus 等)来访问。

根据我现在的理解,Win64 和 32 子系统是完全独立的,因此任何此类交互都应该立即失败(例如尝试通过 64 位应用程序访问 32 位应用程序的某些部分)。奇怪的是,大多数东西似乎都可以正常工作。所以似乎有某种编组/内部的任何东西。

不过,我现在遇到了一些情况,我定义 p/invoke 函数的方式似乎存在问题。我已经宣布它们是“官方的 MS 方式”,只要有东西可能改变大小(也使用很棒的http://www.pinvoke.net/default.aspx/站点),所以我强制我的 .net 应用程序成为64 位(使用编译开关),它们应该使用 64 位版本的 dll 编译为 64 位。

现在奇怪的是,当使用这些调用访问 32 位应用程序时(例如 GetWindowText,它实际上从另一个进程的内存中读取)这些调用似乎工作正常。但。随后的 MSUIA 调用似乎随机失败。

如果我(错误地)为 p/invoke 调用声明了 32 位签名,即使编译为 64 位,一切都运行良好。

对我来说,这没有任何意义。

最干净的解决方案可能是将我的应用程序也编译为 32 位(或与目标应用程序相同),但仍然......我将不胜感激任何对此的见解。

0 投票
3 回答
2905 浏览

delphi - 线程关闭期间Win64 Delphi RTL中的内存泄漏?

很长一段时间以来,我注意到我的服务器应用程序的 Win64 版本泄漏内存。虽然 Win32 版本在内存占用相对稳定的情况下运行良好,但 64 位版本使用的内存定期增加 - 可能 20Mb/天,没有任何明显的原因(不用说,FastMM4 没有报告任何内存泄漏) . 32 位和 64 位版本的源代码相同。该应用程序是围绕 Indy TIdTCPServer 组件构建的,它是一个高度多线程的服务器,连接到数据库,用于处理由 Delphi XE2 制作的其他客户端发送的命令。

我花了很多时间检查自己的代码并试图理解为什么 64 位版本会泄漏这么多内存。我最终使用了旨在跟踪内存泄漏的 MS 工具,如 DebugDiag 和 XPerf,似乎 Delphi 64 位 RTL 中存在一个基本缺陷,每次线程与 DLL 分离时都会导致一些字节泄漏。对于必须 24/7 不间断运行且无需重新启动的高度多线程应用程序,此问题尤为重要。

我用一个非常基本的项目重现了这个问题,该项目由一个主机应用程序和一个库组成,两者都是用 XE2 构建的。DLL 与主机应用程序静态链接。宿主应用程序创建只调用虚拟导出过程并退出的线程:

这是该库的源代码:

宿主应用程序使用一个计时器来创建一个只调用导出过程的线程:

这是一些使用 VMMap 显示泄漏的屏幕截图(查看名为“Heap”的红线)。以下屏幕截图是在 30 分钟间隔内拍摄的。

32位二进制显示增加了16个字节,这是完全可以接受的:

32 位版本的内存使用情况

64位二进制显示增加了12476字节(从820K到13296K),问题比较多:

64 位版本的内存使用情况

堆内存的不断增加也被 XPerf 证实:

XPerf 用法

使用 DebugDiag 我能够看到分配泄漏内存的代码路径:

Remy Lebeau在 Embarcadero 论坛上帮助我了解正在发生的事情:

第二次泄漏看起来更像是一个明确的错误。在线程关闭期间,正在调用 StartLib(),它调用 ExitThreadTLS() 以释放调用线程的 TLS 内存块,然后调用 Halt0() 以调用 ExitDll() 以引发由 DelphiExceptionHandler() 捕获的异常以调用 AllocateRaiseFrame( ),它在访问名为 ExceptionObjectCount 的 threadvar 变量时间接调用 GetTls() 和 InitThreadTLS()。这将重新分配仍在关闭过程中的调用线程的 TLS 内存块。因此,StartLib() 不应该在 DLL_THREAD_DETACH 期间调用 Halt0(),或者 DelphiExceptionHandler 在检测到引发 _TExitDllException 时不应该调用 AllocateRaiseFrame()。

对我来说似乎很清楚,Win64 处理线程关闭的方式存在一个重大缺陷。这种行为禁止开发任何必须在 Win64 下 27/7 运行的多线程服务器应用程序。

所以:

  1. 你觉得我的结论怎么样?
  2. 你们有没有解决这个问题的方法?

质检报告 105559

0 投票
1 回答
166 浏览

c++ - 将 double* 存储在 long (C++) 中

因此,当目标平台为 32 位时,我拥有可以在 Visual Studio 2005 中完美编译的现有代码。但是,它不适用于 64 位。我不明白为什么;事实上,我从来没有见过一个指针被转换为很久以前。它甚至是正确的 C++ 吗?

提前致谢。

0 投票
2 回答
180 浏览

c++ - sprintf_s 对 win64 和 win32 有具体的使用要求吗?

下面的代码片段是一个正在运行的 SW 我是逆向工程的提取和简化(我试图强调这个问题,而不用所有的小细节来打扰你)。

在win64机器上构建以下代码会导致运行时崩溃:

我有几个问题:

  1. 为什么我应该J++在 win32 平台上将索引 ( ) 增加两次?- win32 平台如何知道“跳过”char* 点两次以获得双倍?
  2. sprintf_s 怎么知道在 win32 上从 oData(一个组合容器)中选择正确的字段?但是在win64上它崩溃了?

我认为这在某种程度上与 32 位和 64 位之间的指针大小不同,但我正在寻求您的帮助来解释这种行为。

0 投票
1 回答
209 浏览

qt - running QT Jambi applicantion on Win64

I've been evaluating QT Jambi for an application I'm developing, and on the way I've read that QT Jambi faces some troubles at development time on Win64. However, I won't develop on Win64 so it doesn't matter for now, but what I really need to know is whether an application that is built using QT Jambi would run seamlessly on Win64 or not.

Thanks,

0 投票
1 回答
2125 浏览

windows - x64 调用约定(堆栈)和可变参数

我已经阅读了微软的文档,但是这个方案太尴尬了,我想我会仔细检查以确保我理解正确......

我的理解是传递参数的通用方法是这样的:

实施时似乎很尴尬va_arg……这真的正确吗?

0 投票
1 回答
2240 浏览

java - 在 Windows 7 上实例化和 OleControlSite 时抛出 NullPointerException

NullPointerException在尝试从 SWT 打开 excel 时遇到问题。遗憾的是,我无法发布完整的堆栈跟踪和一些代码,因为它引用了我工作的公司。希望有人以前遇到过这个问题并且可能会认识到它。

这是我可以发布的堆栈跟踪的一部分

这是代码。当实例化一个新的 OleControlSite 时,在最后一行抛出异常。

此代码适用于 Windows XP,但不适用于 Windows 7,它会抛出NullPointerException.

根据立方建议,我创建了一个自包含的示例,这里是代码。

这是一个例外


更新:

我用 maven 创建了一个全新的项目,并为 eclipse sdk 4.2 添加了一个依赖项,这是我的 pom 文件,您可以看到只有一个依赖项。项目中的代码与上面的类相同。

我注意到 OleControlSite 类的源代码从 3.8 sdk 到 4.2 sdk 是相同的,这使得我不太可能是 SDK 版本导致问题。


更新:

我下载了 SWT 源代码,并在此行的 OleClientSite 的第 392 行抛出了异常。

隐藏的例外是


更新 09/05 上午 9:35

感谢 favonius 的信息,我能够找到更多信息。我发现this discussion about 32bit com's on a 64bit windows OS。这是讨论 64 位上的 32 位 com 的地方。 http://www.eclipse.org/forums/index.php/mv/msg/264018/763345/ 这可能是我的问题,因为我们正在运行 Office 2007,它只有 32 位,并且运行在 64 位操作系统上。我想检查注册表,但我不知道我应该查找什么键。有谁知道注册表项是什么?


更新 09/05 上午 9:45

以下是 favonius 提供的 TestCode 类的结果。

运行 1 并注释第 57 行

运行 2 行 57 未注释


更新 09/05 下午 1:51

我们的应用程序输出一个 xls 文件供 excel 打开。我刚刚尝试读取 xlsx 文件,它可以工作。这是解决此特定应用程序问题的合理更改。它不应该打开 xls 文件吗?

0 投票
1 回答
1563 浏览

matlab - 从win64到win32的pnet通信

我使用pnet tcp/udp 工具箱)和psychtoolbox在不同机器上的两个 matlab 实例之间进行通信。我的一台机器是运行 matlab 2010b 的 32 位 win7。另一个是运行 matlab 2012a 的 64 位 win 7。我在将数据从一台计算机传输到另一台计算机时遇到问题。

实验 1:从 64 位计算机运行 udp_send_demo,同时从 32 位计算机运行 udp_plotter_demo。预期结果:32 位计算机绘制数据,等待键盘输入。如果输入 Kb,则关闭图形并结束演示。64位完成发送并停止演示。实际结果:64 位的行为应如此。32 位计算机绘图但挂起并拒绝关闭演示。它不响应任何键盘输入,必须强制关闭。

实验 2:以 32 位发送和 64 位读取反向运行上述实验。预期结果:64 位绘图并等待键盘输入。如果找到 kb 输入,则停止演示。实际结果是 64 位 matlab 崩溃,声称 mex 文件中存在分段违规。它显示一个堆栈跟踪(我在最后附加了它的一部分)。

玩弄端口号没有区别。重新编译“pnet.c”源文件而不是使用预编译的 mex 没有区别。 问题:有没有人尝试过这样的事情?你让它工作了吗?你能建议一些事情来尝试让它工作而不必在我的 Win64 计算机上安装 32 位 matlab 吗?

=============

代码:

服务器端:

客户端:

==============

堆栈跟踪


2012 年 9 月 29 日星期六 16:41:11 检测到分段违规

配置:

崩溃解码:禁用

默认编码:windows-1252

MATLAB 根目录:C:\Program Files\MATLAB\R2012a

MATLAB 版本:7.14.0.739 (R2012a)

操作系统:微软视窗7

处理器 ID : x86 Family 6 Model 58 Stepping 9, GenuineIntel

虚拟机:Java 1.6.0_17-b04 与 Sun Microsystems Inc. Java HotSpot(TM) 64 位服务器 VM 混合模式

窗口系统:版本 6.1(内部版本 7601:Service Pack 1)

故障数:1

异常终止:分段违规

寄存器状态(来自故障):RAX = 0000000000000000 RBX = 0000000000000000

RCX = 000000005d0df7d7 RDX = 0000000000000001

RSP = 00000000040671b0 RBP = 0000000004067289

RSI = 000000000000003d RDI = 000000000000003d

R8 = 000000005d0df7d6 R9 = 000050490ee40167

R10 = 000000000000003d R11 = 0000000000000000

R12 = 0000000000000008 R13 = 000007fefb997678

R14 = 0000000000000002 R15 = 0000000000000002

RIP = 000007fefb99238a EFL = 00010202

CS = 0033 FS = 0053 GS = 002b

堆栈跟踪(来自故障):

[0] 0x000007fefb99238a C:\Users\ephys-data\Desktop\temp\tcp_udp_ip\pnet.mexw64+00009098 (perror+004298)

[1] 0x000007fefb99389b C:\Users\ephys-data\Desktop\temp\tcp_udp_ip\pnet.mexw64+00014491 (mexFunction+001979)

[2] 0x0000000074f10f63 C:\Program Files\MATLAB\R2012a\bin\win64\libmex.dll+00069475 (mexRunMexFile+000131)

[3] 0x0000000074f0fce2 C:\Program Files\MATLAB\R2012a\bin\win64\libmex.dll+00064738 (inSwapMexfileReader+000226)

[4] 0x0000000074f0fe58 C:\Program Files\MATLAB\R2012a\bin\win64\libmex.dll+00065112 (inSwapMexfileReader+000600)

[5] 0x0000000074e4b046 C:\Program Files\MATLAB\R2012a\bin\win64\m_dispatcher.dll+00045126 (Mfh_file::dispatch_fh+000486)

....更多东西....

运行 MEX 文件时检测到此错误。如果 MEX 文件不是 MathWorks 的官方函数,请检查其源代码是否有错误。有关调试 MEX 文件的信息,请参阅外部接口指南。

如果此问题可重现,请通过以下方式提交服务请求:....

技术支持工程师可能会与您联系以提供更多信息。

谢谢您的帮助。


谢谢

-b