草庐IT

c++栈对象的shared_ptr

全部标签

c++ - boost 文件系统错误(temp_directory_path 返回 <Bad Ptr>)

我正在尝试使用Boost获取当前的临时文件夹:boost::system::error_codeerror;autotmp_path=boost::filesystem::temp_directory_path(error);if(boost::system::errc::success!=error.value()){std::cout在visualstudio2013调试session期间调查tmp_path的值时,tmp_path的值似乎不正确-VS显示{m_pathname=}.以下代码也失败,出现异常“stringtoolong”,这可能与问题有关:std::stringtm

windows - 关闭事件对象是否会导致等待该对象的线程唤醒?

假设我有一个Windows事件对象,例如从调用CreateEvent。线程A在WaitForSingleObject(event_handle)中被阻塞。线程B调用CloseHandle(event_handle)。问题一:线程A发生了什么?问题2:如果线程A在WaitForMultipleObjects中被阻塞,会有什么不同吗?WaitForMultipleObjects返回什么? 最佳答案 根据实验,如果句柄关闭,WaitForSingleObject似乎不会唤醒,即线程A一直在等待。我没有检查过,但我假设WaitForMult

windows - 域兼容性 : where should shared data be written?

我们编写的应用程序在XP中运行良好,但在迁移到Vista和Windows7时遇到了严重的问题,这可能是由于用户数据的写入位置。用例是这样的:个人用户需要登录机器并使用它来获取数据。主管用户需要能够从各个用户的肩膀上看到并验证他们是否正确地执行了他们的工作。这些主管还需要检查系统日志以确保系统正常运行。我们在XP中完成这些任务的方法是直接写入C:\驱动器上的文件夹。也许这是不好的做法,也许不是,但基本上系统的所有用户都需要能够将此数据作为共享数据进行访问。在该程序的某些安装中,IT环境根本不安全,计算机只有一个用户,然后每个人分别登录到我们的程序。在该程序的其他安装中,IT人员是能干的,

windows - 关于 Windows 内核对象的问题

我的很多问题都在这里得到了解决,非常感谢你们。我还想再问一个。:)我正在阅读有关的文章,它说:当我们想要访问现有内核对象(而不是创建一个新内核对象)时,我们必须指定我们打算对该对象执行的操作。如果允许我们使用此类操作进行访问,则会返回内核对象的句柄。...如果返回的句柄用于调用需要与您请求的权限不同的API,则会发生拒绝访问错误。据我所知,句柄只是一个普通的整数,它只是进程句柄表的索引,句柄值不能提供更多信息。如果我们已经获得了内核对象的句柄,系统如何检测到我们将它用于我们请求之外的其他操作?一个内核对象可以有多个句柄,这些句柄的拥有者可能有不同的访问类型。系统在哪里存储这些不同的访问

windows - 关于 Win32 ##Event## 同步对象的问题

先介绍一下应用场景:我有一个服务应用程序正在监视某物的状态,同时还有多个应用程序正在等待状态更改。一旦状态发生变化,每个应用程序将读取状态值(通过命名的FileMap对象)并执行相应的操作,然后等待状态再次发生变化。所以我使用了一个命名的事件对象来做同步工作。所有应用程序都在等待此事件被发出信号,并且服务应用程序将设置此事件以在该状态更改时被发出信号。我需要保证当状态改变时,每个等待的申请都会被释放并且只被释放一次!这两种方法我都试过了方法一创建手动重置事件;当状态改变时,先调用SetEvent,然后立即调用ResetEvent。方法二创建手动重置事件;当状态改变时,调用PulseEv

c# - 如何恢复未正确释放的 COM 对象?

当有人使用任务管理器结束已实例化COM对象的.NET进程时,AFAIK无法在try{}finally{}中调用Marshal.FinalReleaseComObject,使用{}或事件处理block。下次启动应用程序时,COM对象处于不可用状态,我需要重新启动机器才能使其再次运行。我使用Marshal.BindToMoniker实例化对象。我做错了什么,我错过了什么吗?我尝试了Saeed的建议,但没有用privateconstintWM_CLOSE=0x0010;protectedoverridevoidWndProc(refMessagem){if(m.Msg==WM_CLOSE){

c++ - 单例 : C++ shared dll

我正在创建一组共享单个dll的dll。共享库有一个单例。运行时,一些操作系统加载的库会生成我的单例的新实例。我如何才能强制所有使用我的dll的库和程序使用始终我的单例实例? 最佳答案 您不能只在多个进程之间共享您的单例实例。但您可以为此目的使用共享内存:以下示例演示了DLL入口点函数如何使用文件映射对象来设置可由加载DLL的进程共享的内存。共享DLL内存仅在加载DLL时持续存在。应用程序可以使用SetSharedMem和GetSharedMem函数来访问共享内存。http://msdn.microsoft.com/en-us/lib

windows - 为什么要初始化一个对象为空

我正在MSDN的帮助下学习Windows编程。为什么有人会像下面这样初始化一个对象?WNDCLASSwc={};这会清零对象的所有内存吗?完整源码如下:#ifndefUNICODE#defineUNICODE#endif#includeLRESULTCALLBACKWindowProc(HWNDhwnd,UINTuMsg,WPARAMwParam,LPARAMlParam);intWINAPIwWinMain(HINSTANCEhInstance,HINSTANCE,PWSTRpCmdLine,intnCmdShow){//Registerthewindowclass.constwch

c++ - 我怎样才能让 WinProc 访问由它创建的对象?

在某些时候,我有这个LRESULTCALLBACKWinProc(HWNDhWnd,UINTmsg,WPARAMwParam,LPARAMlParam){if(msg==WM_CREATE){LPCREATESTRUCTpcs=(LPCREATESTRUCT)lParam;D2DResources*pD2DResources=(D2DResources*)pcs->lpCreateParams;::SetWindowLongPtrW(hWnd,GWLP_USERDATA,PtrToUlong(pD2DResources));}else{D2DResources*pD2DResource

windows - 使用 dnscmd 删除 Windows DNS PTR 条目

在WindowsDNS服务器上,我可以使用以下powershell命令添加资源记录并自动为反向查找区域创建相应的PTRDNS命令。/recordaddmgmt.testrhel1/CreatePTR10.0.0.1有没有办法像上面那样用一个命令删除它们?简而言之,是否有与/createPTR相反的dnscmd开关?像/removePTR或/deletePTR这样的东西?找不到任何这样说的文档 最佳答案 只需确保提供要从反向查找区域中删除的地址:dnscmd./recorddeletemgmt.testrhel1A10.0.0.1