VC文章
juststone
这个作者很懒,什么都没留下…
展开
-
COM 经验的八个教训(7):使用线程或异步调用来避免 DCOM 超时设定太长
使用线程或异步调用来避免 DCOM 超时设定太长总是有人问我当 DCOM 无法完成远程实例化请求或方法调用时出现的超时设定太长的问题。典型的场景如下:客户端调用 CoCreateInstanceEx 来实例化远程机器上的一个对象,但是这台机器临时离线了。在 Windows NT 4.0 上,激活请求不会立即失败,DCOM 可能会花上一分钟或更长时间来返回失败的 HRESULT。DCOM 还可能花费转载 2005-03-12 11:01:00 · 1882 阅读 · 0 评论 -
COM 经验的八个教训(1):总是调用 CoInitialize(Ex)
几个月前,我收到了一封朋友的电子邮件,他就职于一家著名的硬件公司。他的公司编写了一个非常复杂的基于 COM 的应用程序,其中使用了许多进程内和本地(进程外)的 COM 组件。在开始时,应用程序创建了 COM 对象以服务于运行在多线程单元 (MTA) 中的各种客户端线程。该对象还可以托管给 MTA,这意味着接口指针可以在客户端线程之间自由交换。在测试中,我的朋友发现在应用程序准备关闭之前,一切都进行转载 2005-03-12 10:32:00 · 2164 阅读 · 0 评论 -
COM 经验的八个教训(2):不要在线程之间传递原始接口指针
不要在线程之间传递原始接口指针我咨询的首批 COM 项目之一就涉及到一个包含 100,000 行代码的分布式应用程序,该程序是由美国西海岸的一个大型软件公司编写的。该应用程序在多个机器上创建了数十个 COM 对象,并从客户端进程启动的背景线程中调用这些对象。开发小组遇到问题了,调用要么消失得无影无踪,要么在没有明显原因的情况下失败。他们给我演示的最惊人的症状是:当一个调用无法返回时,在同一台机器上转载 2005-03-12 10:36:00 · 1552 阅读 · 0 评论 -
COM 经验的八个教训(6):DCOM 不适于防火墙
DCOM 不适于防火墙关于 DCOM 特性和功能的一个常见问题是:“它能跨 Internet 工作吗?”DCOM 能够很好地跨 Internet 工作,只要将它配置为使用 TCP 或者 UDP,并且通过授予任何人启动和访问权限,可将服务器配置为允许匿名方法调用。毕竟,Internet 是一个巨大的 IP 网络。但矛盾的是,如果您将一个现有的 DCOM 应用程序(在公司的内部网络或 intranet转载 2005-03-12 10:57:00 · 4479 阅读 · 0 评论 -
CoInitializeEx()与CFileDialog等
MFC程序若采用下述语句初始化自由线程单元:::CoInitializeEx(0,COINIT_MULTITHREADED);应用程序将再也不能使用CFileDialog类,而其他的类还能够正常应用Q287087SUMMARYWhen you call or access a shell function or shell interface from a thread that has been转载 2005-03-12 10:07:00 · 1511 阅读 · 0 评论 -
COM 经验的八个教训(3):STA 线程需要消息循环
上一部分中描述的应用程序还有另一个致命缺陷。看看您是否能指出来。这个特殊的应用程序恰好是用 MFC 编写的。在一开始,它使用了 MFC 的 AfxBeginThread 函数启动一系列辅助线程。每个辅助线程要么调用 CoInitialize 要么调用 AfxOleInit(MFC 中类似 CoInitialize 的函数)来初始化 COM。某些辅助线程则调用 CoCreateInstance 来创转载 2005-03-12 10:44:00 · 1456 阅读 · 0 评论 -
COM 经验的八个教训(4):单元模型对象必须保护共享数据
另一个困扰 COM 开发人员的通病是标记为 ThreadingModel=Apartment 的进程内对象。这项指定告诉 COM,对象的实例必须只能在 STA 中创建。它还可让 COM 自由地将这些对象实例放在任何主机进程的 STA 中。假设客户端应用程序有五个 STA 线程,每个线程都使用 CoCreateInstance 来创建同一个对象的一个实例。如果线程是基于 STA 的,且对象标记为 T转载 2005-03-12 10:49:00 · 1255 阅读 · 0 评论 -
COM 经验的八个教训(5):谨慎启动用户
这里还有一个问题让许多 COM 开发人员都吃过苦头。去年春天,有一家公司向我紧急呼救,他们的开发人员使用 COM 构建了一个分布式应用程序,其中客户端进程运行在与远程服务器的 Singleton 对象相连接的网络工作站上。在测试过程中,他们遇到了一些非常奇怪的行为。在一种测试场景中,客户端对 CoCreateInstanceEx 的调用可使它们与 Singleton 对象正常连接。而在另一个场景中转载 2005-03-12 10:55:00 · 1098 阅读 · 0 评论 -
COM 经验的八个教训(8):共享对象并不容易
共享对象并不容易从我收到的邮件和在会议上被问到的问题判断,困扰许多 COM 程序员的一个问题是如何将两个或更多的客户端与一个对象实例连接。要回答这个问题,写出长篇大论(或是一本小册子)都很容易,但其实只要说明与现有对象的连接既不容易也不自动化,就足够了。COM 提供了大量创建对象的方式,包括很受欢迎的 CoCreateInstance(Ex) 函数。但是 COM 缺乏一种通用的命名服务,允许使用名转载 2005-03-12 11:15:00 · 1251 阅读 · 0 评论