草庐IT

c++ - 我如何确定拥有多个 VC++ CRT 状态是否对我的应用程序有问题?

ThisMSDNarticle说如果我的应用程序多次加载VC++运行时,因为它或它所依赖的某些DLL静态链接到VC++运行时,那么应用程序将有多个CRT状态,这可能会导致未定义的行为。p>我该如何确定这对我来说是否是个问题?例如inthisMSDNarticle提供了几个示例,基本上说明由C++运行时维护的对象(例如文件句柄)不应跨DLL边界传递。如果我希望我的项目静态链接到VC++运行时,需要检查的事项列表到底是什么? 最佳答案 只要您不做某些事情,拥有多个CRT拷贝是可以的...:CRT的每个拷贝都将管理自己的堆。如果您在模块A

c++ - 从 C++ 中确定 perl 文件的行号和文件名

我正在使用嵌入在我们应用程序中的Perl。我们已经安装了很多从Perl中调用的C++函数。其中之一是日志功能。我想将调用此函数的Perl文件的文件名和行号添加到日志消息中。我知道在Perl端我可以使用“caller()”函数来获取此信息,但此函数已在数百个位置使用,所以我更愿意修改C++端,是否将此信息传递给C++XSUB功能,如果有,我将如何使用它?谢谢。 最佳答案 这应该有效:char*file;I32line;file=OutCopFILE(PL_curcop);line=CopLINE(PL_curcop);Controlo

电脑服务器离线安装.net framework 3.5解决方案(错误:0x8024402c )(如何确定当前系统是否安装NET Framework 3.5)

问题环境:    日常服务的搭建或多或少都会有需要到NETFramework3.5的微软程序运行框架,本次介绍几种不同的安装方式主要解决运行在Windows2012以上的操作系统的服务。NETFramework3.5是什么?        .NETFramework是微软公司推出的程序运行框架,主要包含运行库和公共语言集,3.5是版本号,目前最新的版本是4.0(不向下兼容)。.NETFramework设计初衷是,实现在不同的操作系统(如windows,unix,macos等)上均可以使用基于.NET开发的软件,实现软件共用。无论使用何种操作系统,只要在相应系统上安装.NETFramework,

c++ - 如何确定 NifTi 文件的字节顺序?

我有一个NifTi文件,当我加载它时,值奇怪地分散在int_32的范围内。但是,当我通过NifTi-Python绑定(bind)加载同一个文件时,值范围不同且正确。(我知道这是正确的,因为文件的生产者(FSL)声称只产生该范围内的值。)所以我想检查这些值是否真的以不同的字节顺序存储(与其他文件相比),如果是,请正确解释这些值。 最佳答案 您可以使用nifti_1_header结构中的第一个字段。它是sizeof_hdr,它包含header的大小(在我的例子中是一个348字节的结构,而不是三个较小的结构)。简单地读取头的前4个字节,它

c++ - 确定二进制文件的大小

我正在尝试读取一个二进制文件,我需要确定它的大小,但无论我尝试过哪种方法,我得到的大小都是零。例如:fstreamcbf(address,ios::binary|ios::in|ios::ate);fstream::pos_typesize=cbf.tellg();//Returns0.char*chunk=newchar[size];cbf.read(chunk,size);//...如果我要使用以下内容:#includestructstatst;stat(address.c_str(),&st);intsize=st.st_size;大小仍然为零。我也尝试了以下方法,但它仍然为零。

c++ - 确定类型删除类之间的继承关系

我有一个典型的类型删除设置:structTEBase{virtual~TEBase(){}//...};templatestructTEImpl:TEBase{//...};现在的问题是:给定这样的二级层次结构,structFoo{};structBar:Foo{};structUnrelated{};是否可能,给定一个TEBase*p,判断是否为*p的动态类型形式为TEImpl,其中,X源自Foo?换句话说,我想要函数:templateboolis_derived_from(TEBase*p);这样:is_derived_from(newTEImpl)==trueis_derived

c++ - 如何确定通过套接字接收到的(序列化和模板化)对象是什么类型?

我正在使用googleprotobuf实现一个简单的Request/Response基于协议(protocol)。对等点可以通过socket接收两者Request和Response,(当然是serialized)作为string.我正在使用我自己的C++套接字实现,所以我实现了operator>>这样(同样适用于operator)从socket接收数据对象:...templatevoidoperator>>(M&m)throw(socks::exception){std::stringstr;if(!this->recv(str)){throwsocks::exception(">>f

c++ - 我们能否在运行时确定两个 type_info 是否可转换?

有没有办法从两个const::std::type_info中判断对象,让我们将它们命名为B和D如果D描述的类型是从类型B派生的?我问是因为我想删除我得到的对象的类型,但稍后能够检查它是否可以安全地提升。void*data;const::std::type_info*D;templatevoidstore(D&&object){D=&typeid(object);data=::std::addressof(object);}templateB&load(){//if(typeid(B)!=(*D))throw::std::bad_cast{};return*reinterpret_cas

c# - 确定哪个应用程序正在阻止关机

与WindowsVista不同,当WindowsXP关闭时,它不会告诉您哪个程序请求不要关闭。这会使Windows仍在运行,并且不会告诉您是什么程序阻止了关机。据我了解,Windows向所有应用程序发送WM_QUERYENDSESSION。如果任何应用程序向该函数返回0,则停止关闭。我想知道是否有一种方法可以捕获程序的返回值并确定WindowsXP没有关闭的原因。谢谢菲尔 最佳答案 枚举所有顶级窗口(使用EnumWindows())并向每个窗口发送WM_QUERYENDSESSION。对于返回阻止值的窗口,检测它是哪个进程。要执行后

c++ - 如何确定编译器对元程序做了什么? (对于 boost.proto)

我如何确定我的编译器(g++)使用模板代码做什么?我正在使用boost.proto(一个表达式模板库)在编译时计算一些数学表达式。代码正确地评估了表达式,但我想看看编译器是否已经将表达式扩展为等同于手写的c代码(即消除了所有临时变量),或者是否还有一些进一步的编译时优化待完成。有没有办法查看编译器对模板做了什么?谢谢 最佳答案 有几种方法可以在模板实例化通过后查看C++代码:使用gcc-fdump-tree-original(甚至可以使用-fdump-tree-all查看更多pass)使用ElsaC++解析器:http://scot