标签: win64

如何在64位Delphi项目中使用64位bass.dll时修复启动时的应用程序崩溃?

我无法使用64位版本的bass.dll运行我的64位Delphi应用程序.我正在使用Delphi XE3来构建我的应用程序.

应用程序崩溃开始0xc000007b.调试器消息:

Thread Start: Thread ID: 7692. Process Project1.exe (7444)
Process Start: D:\svn\preplayer\Project1.exe. Base Address: $0000000076DBC500. Process Project1.exe (7444)
Module Load: Project1. Has Debug Info. Base Address: $0000000000400000. Process Project1.exe (7444)
Module Load: ntdll.dll. No Debug Info. Base Address: $0000000076D90000. Process Project1.exe (7444)
Module Load: snxhk64.dll. No Debug Info. Base Address: $0000000070D20000. Process Project1.exe (7444)
Module Load: KERNEL32.dll. No Debug Info. Base Address: $00000000766B0000. Process Project1.exe (7444)
Module Load: KERNELBASE.dll. No Debug Info. Base Address: …

delphi win64 bass.dll delphi-xe3

4
推荐指数
1
解决办法
1093
查看次数

我的Perl脚本如何知道它在Win64下运行?

如何让我的Perl脚本检测到它在64位Windows机器上运行,即使它是32位perl?

registry perl winapi win64

3
推荐指数
1
解决办法
1777
查看次数

如何使用ifdef检测是否支持Windows DWORD_PTR类型?

Windows API中有一些新的整数类型支持Win64.他们并不总是受到支持; 例如,它们不存在于MSVC6中.

如何编写#if条件来检测这些类型是否受支持<windows.h>

(我的代码需要在许多不同版本的Microsoft Visual C++下编译,包括MSVC6.所以我需要提供我自己的这些类型的定义,#if并在新的编译器中禁用它们).

(对于搜索者,完整的类型列表是:DWORD_PTR,INT_PTR,LONG_PTR,UINT_PTR,ULONG_PTR)

c c++ windows win64 visual-c++

3
推荐指数
1
解决办法
1691
查看次数

编译错误的含义:错误C2704:__va_start内部只允许在varargs中使用?

我正在使用VS2010 Pro编译器,当我在x64上构建时,我得到以下编译错误.在x86上完美编译.错误C2704:'':__va_start内部仅允许在varargs中

方法声明:

int foo(char* buf, int maxChar, const char*& fmt);
Run Code Online (Sandbox Code Playgroud)

定义:

 int foo(char* buf, int maxChar, const char*& fmt)
{
    int numChar = 0;
    if (fmt)
    {
        va_list plist;
        va_start(plist, fmt);
        numChar = _vsnprintf(buf, maxChar, fmt, plist);
        va_end(plist);
    }
    return numChar;
}
Run Code Online (Sandbox Code Playgroud)

这个错误是什么意思?如何解决这个问题?

c++ winapi win64 variadic-functions visual-studio-2010

3
推荐指数
1
解决办法
2880
查看次数

如何在32位批处理脚本中运行64位版本的Windows实用程序(如msiexec)?

我有一个批处理文件(出于兼容性原因)在32位cmd.exe进程中运行.但是,在这种情况下,我现在需要启动64位版本的Windows命令行工具msiexec.我怎样才能做到这一点?

其他细节:

我正在使用批处理文件来安装各种软件产品.为了最大限度地兼容旧产品,批处理文件作为32位进程运行.但是,我现在需要安装Intel Haxm,它需要64位版本msiexec.

我已经尝试过调用c:\windows\system32\msiexec.exe,但是在执行此操作时,Windows安装程序日志文件仍然说:

=== Verbose logging started: 14.04.2015 14:27:53 Build type: SHIP UNICODE 5.00.9600.00 Calling process: c:\windows\SysWOW64\msiexec.exe ===

windows win64 batch-file msiexec

3
推荐指数
1
解决办法
2636
查看次数

EnumWindows在64位Delphi中表现得很奇怪

我正在使用64位Windows 8计算机上的Delphi XE3,构建32位和64位应用程序.

我正在使用EnumWindows找出给定其进程ID的进程主窗口的Windows句柄.代码使用回调例程中的LPARAM参数将指针传递给记录.

我正在使用的代码适用于32位版本.

当我编译并运行64位构建时,它失败了.出现此问题的原因是LPARAM值似乎在Wnd参数中传递.Param值总是设置为$ FFFF ...换句话说,我根本没有传递HWND值...所以它不是因为参数只是交换了.

type
  PEnumInfo = ^TEnumInfo;
  TEnumInfo = record
    ProcessID : DWORD;
    HWND      : THandle;
  end;

function EnumWindowsProc(Wnd: HWND;  Param : LPARAM): Bool; stdcall;
    var
      PID : DWORD;
      PEI : PEnumInfo;
    begin
// in 32-bit Param matches the address of the param that is passed
// in 64-bit Param is set to $FFFF - however Wnd = the expected address
      ShowMessage('PEI = '+IntToStr(Param));

      PEI := PEnumInfo(Param);
      GetWindowThreadProcessID(Wnd, @PID);

// the code fails at this …
Run Code Online (Sandbox Code Playgroud)

delphi winapi win64 delphi-xe3

3
推荐指数
1
解决办法
895
查看次数

C/C++在引擎盖下按值返回struct

(这个问题特定于我的机器的架构和调用约定,Windows x86_64)

我不记得我在哪里读过这个,或者我是否正确地回忆过它,但我听说过,当一个函数应该按值返回一些结构或对象时,它会填充它rax(如果对象可以适合在寄存器宽度为64位)或传递一个指针,指向结果对象将在哪里(我猜测在调用函数的堆栈帧中分配)rcx,在那里它将执行所有通常的初始化,然后a mov rax, rcx为返回行程.就是这样的

extern some_struct create_it(); // implemented in assembly
Run Code Online (Sandbox Code Playgroud)

真的会有一个秘密的参数

extern some_struct create_it(some_struct* secret_param_pointing_to_where_i_will_be);
Run Code Online (Sandbox Code Playgroud)


我的记忆是正确的,还是我错了?如何通过函数的值返回大对象(即宽度超过寄存器宽度)?

c c++ assembly win64 x86-64

3
推荐指数
2
解决办法
881
查看次数

编译为x64的C++/CLI项目中定义的_WIN64在哪里?

它似乎是在我创建的每个项目中自动添加的,我为x64编译,但在选择x64配置时,它甚至不会出现在项目的配置属性/(C/C++)/预处理器中.

win64 c++-cli

2
推荐指数
1
解决办法
7158
查看次数

32位matlab程序,64位windows,如何获得6GB的RAM?

我有一些只能在32位窗口上运行的matlab代码,但我需要至少6 GB的ram才能运行它.在我的实验室中,唯一拥有6GB RAM的机器运行64位窗口,有没有办法在这里运行此代码?我正在考虑模拟32位窗口并在其上运行它,这会工作吗?

matlab winapi win64 memory-management

2
推荐指数
2
解决办法
2490
查看次数

为什么64位Windows上的本机长基元的大小只有4个字节?

有人请告诉我这有什么意义,以及如何让它停止?说真的,我疯了还是64位Windows长型只有4个字节?这有什么用呢?我认为本机长原始大小应该与本机寄存器大小相同.

[32-bit Linux]

me@u32:~$ ./sizes32
sizeof(char):      1
sizeof(short):     2
sizeof(int):       4
sizeof(long):      4
sizeof(long long): 8

[64-bit Linux]

me@u64:~$ ./sizes64
sizeof(char):      1
sizeof(short):     2
sizeof(int):       4
sizeof(long):      8
sizeof(long long): 8

[32-bit Windows]

C:\Users\me\Downloads>sizes32.exe
sizeof(char):      1
sizeof(short):     2
sizeof(int):       4
sizeof(long):      4
sizeof(long long): 8

[64-bit Windows]

C:\Users\me\Downloads>sizes64.exe
sizeof(char):      1
sizeof(short):     2
sizeof(int):       4
sizeof(long):      4
sizeof(long long): 8
Run Code Online (Sandbox Code Playgroud)

c windows x86 win64 x86-64

2
推荐指数
2
解决办法
177
查看次数