草庐IT

c - 如何从 ml64.exe(MSVC 64 位 X64 汇编程序)访问线程本地存储?

以下C函数尝试使用线程局部存储变量以线程安全的方式防止多核代码中的递归。但是,由于有些复杂的原因,我需要在X64汇编程序(IntelX86/AMD64位)中编写此函数,并使用VC2010中的ml64.exe进行汇编。如果我使用全局变量,我知道如何执行此操作,但我不确定如何使用具有__declspec(thread)的TLS变量正确执行此操作。__declspec(thread)inttls_VAR=0;voidnorecurse(){if(0==tls_VAR){tls_VAR=1;DoWork();tls_VAR=0;}}注意:这是VC2010踢出来的功能。但是,MASM(ml64.

windows - 如果我尝试将 header 编译为没有换行符的包含,为什么 MSVC++ 会给我一个错误? (C++/Windows )

我正在使用MSVC++编写一个简单的窗口,并且我包含了一个菜单的资源文件:MYMENUMENUDISCARDABLE//etc.然后我创建了一个头文件“resourcedef.h”,其定义如下#defineID_MYMENU_FILE_CLOSE1002我可以将它包含在我的main.cpp文件中而不会出错,但是,当我将它包含在资源文件中时,我得到了错误.\resourcedef.h(9):fatalerrorRC1004:unexpectedendoffilefound(resourcedef.h恰好有9行长)。当我在.h的末尾添加换行符时,//lines1-8#defineID_MY

c - 为什么这个 MSVC API 是这样定义的?

errno_t_dupenv_s(char**buffer,size_t*sizeInBytes,constchar*varname);我有几个问题:为什么需要指向指针(**)的指针而不是指针(*)?为什么sizeInBytes是必需的,strlen(buffer)不可用吗? 最佳答案 msvc下任何以_s为后缀的函数都是安全函数,这意味着它不会对传递的数据的完整性做出任何假设。正是出于这个原因,字符串的长度是必需的,因为您不能假设它以null终止或根本终止(您可能也只想要一半的字符串,但这是副作用)。安全函数都返回错误代码,这样就

c++ - 我的程序在 Windows 上使用 MSVC 和 g++ 编译器运行,但在 Linux 上不运行

我正在为一项研究任务编写遗传算法。我不是一个非常有经验的C++程序员(因为我是一名数学家),但我管理我的程序在Windows环境中使用MSVC2008和g++编译器正确编译和运行(我使用CygWin在Windows7上运行g++)。现在,问题是这个程序必须在Linux环境下使用g++的集群计算机中运行,但它总是在执行时崩溃(尽管至少它编译正确)。我已经解决了明显的细节(例如使用/而不是\作为文件名),但无法使其在Linux上正常运行。但是,当我在下面注释函数“Cruce”时,程序结束了,尽管它显然没有执行所需的任务。这是这样一个函数的代码,以及它调用的其他函数(唯一的全局变量是BITG

java - 我想在 Ubuntu 12.04LTS 中制作直接执行 jar 文件的 sh 文件

在Ubuntu12.04中(不工作)我创建一个sh文件并编写代码。@echooffjava-jarProgram.jar还允许执行权限。但是没有执行任何操作。在Windows中它工作正常。在Windows7中(工作中)我创建一个批处理文件并编写代码。@echooffjava-jarProgram.jar请帮助我做错了什么。 最佳答案 Ubuntushell脚本不能使用用于DOS命令脚本的@echooff。你需要这样的东西,#!/bin/shjava-jarProgram.jar第一行称为Shebang(#!是一种magicnumbe

c++ - 静态链接MSVC库,动态链接Qt

我正在部署我用Qt构建的东西,它是动态链接的,因为LGPL。我使用windeployqt.exe收集必要的dll,它在Windows10机器上运行良好。当我在Windows7机器上尝试时,出现了这个错误:Theprogramcan'tstartbecauseMSVCP140.dllismissingfromyourcomputer.经过一番研究,发现MSVCP140.dll是VisualStudio安装的System32中的一个dll。我应该让我的客户安装VisualStudio,这对我来说不是一个选项,或者静态链接它。我尝试使用/MT但我得到了:Overriding/MTwith/M

windows - 如何使用 Windows 命令行将 12 小时格式的时间添加到文件名?

我需要具有12小时格式的文件名-从1到12(上午或下午可选)如下所示:myfile_2pm.txt我写了脚本,但它只适用于24小时格式,如果它有“1位”小时则崩溃,因为冒号:Hello>myfile_%time:~-0,2%.txt 最佳答案 @echooffsetlocalenableextensionscall:get12hhourecho%hour%echoThisisatest>myfile_%hour%.txtexit/b:get12houtputVarsetlocalenableextensionsfor/f"token

windows - 在配备 GeForce 960M 的笔记本电脑上初始化 D3D12 调试接口(interface)失败

当我尝试使用标志DXGI_CREATE_FACTORY_DEBUG调用D3D12GetDebugInterface或CreateDXGIFactory2时,调用在我的笔记本电脑上失败,但在我的台式机上却没有。其他调用在笔记本电脑上运行良好,我可以渲染东西——我只是无法初始化调试层。桌面有一个老式的GeForce650Ti,笔记本电脑是戴尔XPS15笔记本电脑(最新一代),它有一个GeForceGTX960M。两者都有最新的驱动程序(361.43)。有什么想法可能会出错吗?我在NVIDIA上发布了devtalkforum首先,但交叉发布到stackoverflow,因为NVIDIA官方论

c++ - 使用 MSVC 9 编译的程序无法在 vanilla SP3 XP 上启动

我在虚拟机上安装了XP,将其更新为SP3,然后在我的真实计算机上测试了一个用VisualC++2008编译的小程序-但是它没有启动,只是输出一个错误,说检测到问题并且重新安装应用程序(我的应用程序大小为10KB,甚至没有安装)可以解决问题。运行使用MSVC9编译的程序需要什么?我可以只包含一些dll以便它在任何地方都能工作吗? 最佳答案 静态链接到运行时库(选择multithreaded而不是multithreaded-dll)或遵循tommieb75的建议并安装MSVC9runtimeredistributable(复制到syst

windows - clang-tidy 在 Windows 上使用 MSVC2015

我尝试使用clang-tidy在Windows上-到目前为止还没有成功。作为先决条件,我已经安装了LLVM3.9.1。我的普通编译器是MSVC2015,我的构建系统是QBS1.7.2。使用QBS我生成了compile_commands.json.当然,该文件包含MSVC2015cl.exe标志/参数。以下是显示一个文件条目的摘录:{"arguments":["C:/Programs/MVS14/VC/bin/amd64/cl.exe","/nologo","/c","/EHsc","/Zi","/MDd","/IC:\\some_ci_job_folder\\src\\some_com