检查 COM 接口是否还存在?

2023-11-23

在 COM 中,如何验证指向 COM 对象的指针在另一端仍然具有有效的对象?

我遇到一个问题,以下代码尝试检查是否m_pServer指针仍然存在,但是当暴露该接口的应用程序被终止时,这段代码会使应用程序崩溃。有人可以建议如何在使用前检查指针吗?

if (FAILED(m_pServer->StillAlive())) { // do something }

如果 m_pServer 不再位于内存中,则此代码将失败。

EDIT:

例外:Client40.exe 中 0x7728fbae (kernel32.dll) 处的首次机会异常:0x800706BA:RPC 服务器不可用。

调用堆栈:

    kernel32.dll!RaiseException()  + 0x58   
    rpcrt4.dll!RpcRaiseException()  + 0x3e  
    rpcrt4.dll!NdrProxyErrorHandler()  + 0x28   
    rpcrt4.dll!NdrProxySendReceive()  + 0xa4    
    rpcrt4.dll!NdrProxySendReceive()  + 0x119   
    rpcrt4.dll!NdrComplexArrayMarshall()  + 0x26d   
--> Client40.exe!SlaveDriver::run()  Line 97 + 0x14 C++  //Runs while loop, to handle requests
    Client40.exe!DThread::tfunc(void * thisptr=0x0047e694)  Line 56 + 0xd   C++
    Client40.exe!_threadstartex(void * ptd=0x01b20e00)  Line 241 + 0xd  C
    kernel32.dll!BaseThreadInitThunk()  + 0x12  
    ntdll.dll!RtlInitializeExceptionChain()  + 0x63 
    ntdll.dll!RtlInitializeExceptionChain()  + 0x36 

您在这里尝试做的事情根本不可能。因为m_pServer生活在另一个进程中,你实际上是在问以下问题

进程 XXX 是否仍在运行?

在 Windows(或 linux / unix)世界中,这根本不是一个可以回答的问题。您永远无法可靠地回答问题,因为问题一旦得到回答,其结果就可能无效。进程可以在任何时间点终止,包括在您检查和访问 COM 对象之间。

然而这个问题的一个稍微不同的版本是可以回答的

进程 XXX 仍在运行吗?

解决此类问题的唯一方法是执行有问题的操作并期望它失败。如果成功,那么很好,您已经回答了问题的修改版本。如果失败,那么您需要解释失败以确定操作是否失败或进程消失。

这是正确处理这种情况的唯一方法。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

检查 COM 接口是否还存在? 的相关文章

  • 用于代数简化和求解的 C# 库 [关闭]

    Closed 这个问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 网络上有很多代数求解器和简化器 例如 algebra com 上不错的代数求解器和简化器 然而 我正在
  • 为什么 int8_t 和用户通过 cin 输入显示奇怪的结果[重复]

    这个问题在这里已经有答案了 一小段代码让我发疯 但希望你能阻止我跳出窗外 看这里 include
  • 提交后禁用按钮

    当用户提交付款表单并且发布表单的代码导致 Firefox 中出现重复发布时 我试图禁用按钮 去掉代码就不会出现这个问题 在firefox以外的任何浏览器中也不会出现这个问题 知道如何防止双重帖子吗 System Text StringBui
  • 复制 std::function 的成本有多高?

    While std function是可移动的 但在某些情况下不可能或不方便 复制它会受到重大处罚吗 它是否可能取决于捕获变量的大小 如果它是使用 lambda 表达式创建的 它依赖于实现吗 std function通常被实现为值语义 小缓
  • C中的malloc内存分配方案

    我在 C 中尝试使用 malloc 发现 malloc 在分配了一些内存后浪费了一些空间 下面是我用来测试 malloc 的一段代码 include
  • 在 C 中匹配二进制模式

    我目前正在开发一个 C 程序 需要解析一些定制的数据结构 幸运的是我知道它们是如何构造的 但是我不确定如何在 C 中实现我的解析器 每个结构的长度都是 32 位 并且每个结构都可以通过其二进制签名来识别 举个例子 有两个我感兴趣的特定结构
  • 获取两个工作日之间的天数差异

    这听起来很简单 但我不明白其中的意义 那么获取两次之间的天数的最简单方法是什么DayOfWeeks当第一个是起点时 如果下一个工作日较早 则应考虑在下周 The DayOfWeek 枚举 http 20 20 5B1 5D 3a 20htt
  • java.io.Serialized 在 C/C++ 中的等价物是什么?

    C C 的等价物是什么java io Serialized https docs oracle com javase 7 docs api java io Serializable html 有对序列化库的引用 用 C 序列化数据结构 ht
  • 使用接口有什么好处?

    使用接口有什么用 我听说它用来代替多重继承 并且还可以用它来完成数据隐藏 还有其他优点吗 哪些地方使用了接口 程序员如何识别需要该接口 有什么区别explicit interface implementation and implicit
  • 是否有实用的理由使用“if (0 == p)”而不是“if (!p)”?

    我倾向于使用逻辑非运算符来编写 if 语句 if p some code 我周围的一些人倾向于使用显式比较 因此代码如下所示 if FOO p some code 其中 FOO 是其中之一false FALSE 0 0 0 NULL etc
  • 标准化 UTF-8 到底是什么?

    The 重症监护室项目 http userguide icu project org transforms normalization 现在也有一个PHP库 http us php net manual en class normalize
  • 在一个平台上,对于所有数据类型,所有数据指针的大小是否相同? [复制]

    这个问题在这里已经有答案了 Are char int long 甚至long long 大小相同 在给定平台上 不能保证它们的大小相同 尽管在我有使用经验的平台上它们通常是相同的 C 2011 在线草稿 http www open std
  • 使用自定义堆的类似 malloc 的函数

    如果我希望使用自定义预分配堆构造类似 malloc 的功能 那么 C 中最好的方法是什么 我的具体问题是 我有一个可映射 类似内存 的设备 已将其放入我的地址空间中 但我需要获得一种更灵活的方式来使用该内存来存储将随着时间的推移分配和释放的
  • 使用

    因此 我决定开始使用 C 进行编程 我所做的一件事就是创建一个 pausec exe pause exe 克隆 它有效 但是当像这样调用它时 lt nul pausec 它崩溃了 据我所知 我得到的错误是这样的 未处理的异常 System
  • 如何禁用 fread() 中的缓冲?

    我正在使用 fread 和 fwrite 读取和写入套接字 我相信这些函数用于缓冲输入和输出 有什么方法可以在仍然使用这些功能的同时禁用缓冲吗 Edit 我正在构建一个远程桌面应用程序 远程客户端似乎 落后于服务器 我不知道可能是什么原因
  • “接口”类似于 boost::bind 的语义

    我希望能够将 Java 的接口语义与 C 结合起来 起初 我用过boost signal为给定事件回调显式注册的成员函数 这非常有效 但后来我发现一些函数回调池是相关的 因此将它们抽象出来并立即注册所有实例的相关回调是有意义的 但我了解到的
  • 动态添加 ASP.Net 控件

    我有一个存储过程 它根据数据库中存储的记录数返回多行 现在我想有一种方法来创建 div 带有包含该行值的控件的标记 如果从数据库返回 10 行 则 10 div 必须创建标签 我有下面的代码来从数据库中获取结果 但我不知道如何从这里继续 S
  • C++ 函数重载类似转换

    我收到一个错误 指出两个重载具有相似的转换 我尝试了太多的事情 但没有任何帮助 这是那段代码 CString GetInput int numberOfInput BOOL clearBuffer FALSE UINT timeout IN
  • 如果没有抽象成员,基类是否应该标记为抽象?

    如果一个类没有抽象成员 可以将其标记为抽象吗 即使没有实际理由直接实例化它 除了单元测试 是的 将不应该实例化的基类显式标记为抽象是合理且有益的 即使在没有抽象方法的情况下也是如此 它强制执行通用准则来使非叶类抽象 它阻止其他程序员创建该类
  • WebSocket安全连接自签名证书

    目标是一个与用户电脑上安装的 C 应用程序交换信息的 Web 应用程序 客户端应用程序是 websocket 服务器 浏览器是 websocket 客户端 最后 用户浏览器中的 websocket 客户端通过 Angular 持久创建 并且

随机推荐

  • UITableViewCell 抛出异常

    我正在将一个项目更新到 iOS 8 并且我的 UITableViewCell 实现之一遇到了这个问题 当前在模拟器上而不是设备上 并且它设置为 iPhone 6 Assertion failure in UITableViewCell se
  • 根据值拆分数组

    自从我不得不处理一些 javascript 代码以来已经很长时间了 我已经很生疏了 我需要像这样分割一个数组 Object 0 gt 2013 04 12 1 gt text 2 gt text 3 gt text 4 gt text 5
  • 如何解决“本地主机意外关闭连接”错误?

    我正在努力通过 Mean Machine JavaScript 堆栈初学者实用指南 作者 Chris Sevilleja 我的问题在第 60 页 根据本书的说明 我创建了一个小问题server js文件 以及package json 并使用
  • 远程跟踪分支和远程分支有什么区别?

    看来我可以从远程存储库上的分支中提取或推送到我正在处理的分支 如果是这样 那么远程跟踪分支的目的是什么 仅仅是为了检查分支并看看它是什么样子吗 看起来远程跟踪分支就像远程分支的镜子 仅供参考 我对 git 相当陌生 但是已经阅读并重新阅读了
  • TMemo 最大宽度

    有没有办法让TMemo将超过1024的文本显示为1行 看看这个简单的代码 procedure TForm1 Button2Click Sender TObject var s string i integer begin s for i 0
  • 了解非阻塞线程同步和Thread.MemoryBarrier

    在这本线程在线书中 http www albahari com threading part4 aspx 有一个例子Thread MemoryBarrier class Foo int answer bool complete void A
  • 欠定系统的非负最小二乘

    考虑以下问题 Find x 1 x 2 x 3 gt 0这样 67 5 60 x 1 90 x 2 120 x 3 60 30 x 1 120 x 2 90 x 3 有没有办法在Python中解这个方程 也许与scipy nnls 使用 s
  • 同时按总和聚合一列并按平均值聚合另一列

    我想在日期框架上使用聚合函数 但对一列求和并取另一列的平均值 这是一个示例数据框 Manager Category Amount SqFt Joe Rent 150 500 Alice Rent 250 700 Joe Utilities
  • 更改通用 Windows 平台中的按钮样式

    我尝试制作一个简单的 C UWP 应用程序 但我不知道当鼠标悬停在按钮上时如何删除灰色背景 我怎么做到这一点 请记住 它是适用于 Windows 10 平台的 UWP 而不是 Windows Phone 8 1 或 WPF 按着这些次序 在
  • Qt 检测计算机何时进入睡眠状态?

    如何检测用户计算机何时进入睡眠状态 笔记本电脑盖子关闭 由于不活动而进入睡眠模式等 我需要这样做来断开用户的 TCP 连接 基本上我们有一个简单的聊天应用程序 我们想让用户离线 Qt 无法检测计算机何时进入睡眠或休眠状态 但有一些依赖于平台
  • 对于数组,为什么会出现 a[5] == 5[a] 的情况?

    正如乔尔在书中指出的那样堆栈溢出播客 34 in C语言 又名 K R C 中提到了数组的这个属性 a 5 5 a Joel 说这是因为指针运算 但我还是不明白 为什么a 5 5 a C 标准定义了 运算符如下 a b a b 所以a 5
  • Django Rest框架-过滤多对多字段

    假设我有一个这样的模型 class Car models Model images models ManyToManyField Image class Image models Model path models CharField ty
  • ZF2 中的会话

    您能告诉我如何在 ZF2 中正确使用会话吗 到目前为止我有这个代码 session gt remember me seconds gt 2419200 use cookies gt true cookie httponly gt true
  • 在列表中创建重复的项目

    我有以下代码来复制列表的成员X times 虽然它有效 但感觉不是特别干净 实时代码示例 http rextester com UIVZVX7918 public static List
  • 如何通过方法参数加锁?

    string Get string key lock sync DoSomething 如果 DoSomething 仅依赖于密钥 我想要密钥依赖锁 我认为它可能是带有同步对象的字典 有没有完整的解决方案 就像真实的例子一样在 ASP NE
  • Instagram API 匹配代码未找到或已被使用

    我在使用 Instagram API 的实时服务器上看到此错误 Error true message Matching code was not found or was already used 我在这里阅读了一些清除缓存的建议 但这并不
  • Laravel:POST 方法返回 MethodNotAllowedHttpException

    我有一个POST路线在我的api php文件 它是这样的 Route group namespace gt api function Route post parent signup ParentController signUp 我正在尝
  • ejb 3.1 中的计时器服务 - 调度调用超时问题

    我使用 Singleton Schedule 和 Timeout 注释创建了简单的示例 以尝试它们是否能解决我的问题 场景是这样的 EJB 每 5 秒调用一次 检查 函数 如果满足某些条件 它将创建单个操作计时器 该计时器将以异步方式调用一
  • JavaFX:将控制台输出重定向到在 SceneBuilder 中创建的 TextArea

    EDIT 4 我创建了一个简单的示例 应该可以让您了解现在发生的情况 现在发生的情况是 每当我单击按钮将 HELLO WORLD 打印到 TextArea 时 程序就会挂起并使用 100 的 CPU Eclipse 控制台面板中也没有输出
  • 检查 COM 接口是否还存在?

    在 COM 中 如何验证指向 COM 对象的指针在另一端仍然具有有效的对象 我遇到一个问题 以下代码尝试检查是否m pServer指针仍然存在 但是当暴露该接口的应用程序被终止时 这段代码会使应用程序崩溃 有人可以建议如何在使用前检查指针吗