实战COM(09)----COM+的特性之对象池

Silverlight Bing Maps遗留系统维护与迁移实战指南 Silverlight和Bing Maps作为早期Web地理信息开发的核心技术栈,虽已停止官方支持,但仍在大量政企关键业务系统中稳定运行。其技术原理基于插件化富客户端架构、WCF RIA Services数据绑定及V7 SDK离线地图渲染机制,具备强稳定性与低运维侵入性。在现代Windows环境(Win10/11 IE模式)下,通过.NET Framework版本控制、CDN资源离线化、DOM容器劫持等工程手段可实现可靠复现。技术价值在于支撑百万级点位热力图、自定义空间索引查询与混合架构平滑演进,广泛应用于 阅读详情

本文欢迎转载,唯请注明出处及作者 blackcolor@263.net
---------------------------------------------------

                     实战COM(09)----COM+的特性之对象池


    本节我们将上一节的组件改造成可池化的组件。修改如下:
一、修改组件
1)头文件Simple05.h
// Simple05.h : Declaration of the CSimple05

#ifndef __SIMPLE05_H_
#define __SIMPLE05_H_

#include "resource.h"       // main symbols
#include <mtx.h>

/////////////////////////////////////////////////////////////////////////////
// CSimple05
class ATL_NO_VTABLE CSimple05 :
 public CComObjectRootEx<CComMultiThreadModel>,
 public CComCoClass<CSimple05, &CLSID_Simple05>,
 public IObjectControl,  // 支持对象池操作
 public ISimple05
{
public:
 CSimple05()
 {
 }

DECLARE_REGISTRY_RESOURCEID(IDR_SIMPLE05)

DECLARE_PROTECT_FINAL_CONSTRUCT()

BEGIN_COM_MAP(CSimple05)
 COM_INTERFACE_ENTRY(ISimple05)
 COM_INTERFACE_ENTRY(IObjectControl)
END_COM_MAP()

// IObjectControl
public:
 STDMETHOD(Activate)();
 STDMETHOD_(BOOL, CanBePooled)();
 STDMETHOD_(void, Deactivate)();

 CComPtr<IObjectContext> m_spObjectContext;

// ISimple05
public:
 STDMETHOD(ModifyData)();
};

#endif //__SIMPLE05_H_

2)应用文件Simple05.cpp
// Simple05.cpp : Implementation of CSimple05
#include "stdafx.h"
#include "Step05.h"
#include "Simple05.h"

#include <mtx.h>    // 事务支持
#include <atldbcli.h>    // 数据库操作
// 加入comutil支持
#include <comutil.h>
#pragma comment( lib, "comsupp.lib" )

/////////////////////////////////////////////////////////////////////////////
// CSimple05

// 定义一个新类
class CAuthors
{
public:
 // 数据--宽度来源于表Authors
 char m_szAu_Id[12];  
 char m_szAu_lName[41];
 
 // 参数绑定
 BEGIN_PARAM_MAP(CAuthors)
  COLUMN_ENTRY(1, m_szAu_lName)
  COLUMN_ENTRY(2, m_szAu_Id)
 END_PARAM_MAP()
};


STDMETHODIMP CSimple05::ModifyData()
{
 CDataSource Connection;
 CSession Session;
 CCommand<CAccessor<CAuthors> > Authors;
 HRESULT  hr;

 // 创建一个事务
 //IObjectContext* pObjectContext = NULL;
 //hr = GetObjectContext(&pObjectContext);
 //if(FAILED(hr) || ! pObjectContext) return hr;

 // 检查是否存在事务环境
 //if(! pObjectContext->IsInTransaction()) return E_FAIL;

 // 打开数据库
 CDBPropSet dbinit(DBPROPSET_DBINIT);
 dbinit.AddProperty(DBPROP_INIT_DATASOURCE, OLESTR("GP2000"));   // 服务器名
 dbinit.AddProperty(DBPROP_AUTH_USERID, OLESTR("sa"));    // 用户名
 dbinit.AddProperty(DBPROP_AUTH_PASSWORD, OLESTR("123"));   // 密码
 dbinit.AddProperty(DBPROP_AUTH_PERSIST_SENSITIVE_AUTHINFO, false);
 dbinit.AddProperty(DBPROP_INIT_CATALOG, OLESTR("pubs"));   // 数据库名
 dbinit.AddProperty(DBPROP_INIT_LCID, (long)2052);
 dbinit.AddProperty(DBPROP_INIT_PROMPT, (short)4);
 hr = Connection.Open(_T("SQLOLEDB.1"), &dbinit);
 if (FAILED(hr)) return hr;
 
 hr = Session.Open(Connection);
 if (FAILED(hr)) 
 {
  Connection.Close();
  return hr;
 }
 // 设置更新条件  
 strcpy(Authors.m_szAu_Id,    "172-32-1176"); // 172-32-1176
 strcpy(Authors.m_szAu_lName, "MY name");  // White
 hr = Authors.Open(Session, "Update Authors Set Au_lName = ? Where Au_Id = ?");
 
 //if(pObjectContext)
 //{
  if(SUCCEEDED(hr))
  {
   m_spObjectContext->SetComplete(); // 提交事务
  }
  else
  {
   m_spObjectContext->SetAbort();
  }
 //}

 Session.Close();
 Connection.Close();

 return hr;
}
// 对象池操作
HRESULT CSimple05::Activate()
{
 HRESULT hr = GetObjectContext(&m_spObjectContext);
 if (SUCCEEDED(hr))
  return S_OK;
 return hr;
}

BOOL CSimple05::CanBePooled()
{
 return TRUE;
}

void CSimple05::Deactivate()
{
 m_spObjectContext.Release();
}

二、配置对象池
1)从管理工具打开“组件服务”,删除并重新安装组件“Step05.Simple05.1”组件
2)设置“Step05.Simple05.1”属性,如下图,

Vue3与Unity WebGL通信实战:构建数字孪生应用 在现代Web开发中,前端框架与3D可视化技术的融合已成为构建复杂应用的关键。Vue3凭借其响应式系统和组合式API,为数据驱动型应用提供了高效开发体验。Unity WebGL则将强大的3D渲染能力引入浏览器环境,支持复杂场景的实时渲染与交互。通过JavaScript与C#间的跨语言通信机制,两者可实现高效数据交换,从而在数字孪生、工业监控等场景中发挥巨大价值。本文聚焦于Vue3与Unity WebGL间的通信实现,详细解析了基于postMessage和jslib的通信桥梁搭建方法,并提供了性能优化与实战避坑 阅读详情

相关推荐

TypeScript调用Unreal C++实战:Puerts集成与游戏逻辑脚本化开发

在现代游戏开发中,脚本语言与原生代码的交互是提升开发效率、实现热更新的关键技术。其核心原理是通过绑定层建立脚本引擎与游戏引擎之间的通信桥梁,允许脚本直接调用引擎底层接口。这项技术的价值在于,它结合了脚本语言的快速迭代、动态类型优势与原生代码的高性能执行能力,广泛应用于游戏逻辑、UI系统、配置驱动等需要频繁修改和调试的场景。通过Puerts这样的桥接工具,开发者可以在Unreal Engine中利用TypeScript的强类型和模块化特性,实现游戏逻辑的脚本化开发,显著提升迭代速度。本文基于实战经验,详细介绍

weixin_30653023的博客 863

ATL智能指针类剖析

CComPtr CComPtr派生自模板类CComPtrBase,T代表某个COM接口。CComPtrBase类只有一个成员变量T* p。下面是它们的代码分析: 构造函数 protected: CComPtrBase() throw() { p = NULL; } CComPtrBase(_In_ int nNull) throw() { ATLASSERT(nNu

尘雨::执着VC 1445

Java生产级跨市场AI交易中枢:A股期货外汇币圈全链路实现

在量化交易基础设施中,'低延迟系统'与'多市场统一结算'是高频搜索的核心技术概念。其原理在于通过JVM确定性内存模型(如ZGC+@Contended)保障微秒级行情处理稳定性,并基于时间轴驱动的分市场结算引擎解决T+0/T+1等异构交收规则冲突。技术价值体现在可审计、可热部署、符合等保三级要求的金融级可靠性,支撑实盘风控、智能订单路由与半自动人工干预等工程实践。典型应用场景包括券商自营系统对接、私募多策略中台建设及跨境套利策略回测。本文聚焦Java 17原生实现的全链路交易中枢,覆盖从Level2行情解析、

weixin_33462927的博客 30

关于MFC的各种技巧回答

问】如何判定剪贴板中有没有文本数据? 答】 COleDataObject dataObject; dataObject.AttachClipboard(); if(dataObject.IsDataAvailable(CF_TEXT)) { .....//有文本数据 } 问】如何得到ComboBox的Edit句柄? 答】CEdit *pEdit = (CEdit*)CCombo

aaahuanian的专栏 5981

COM+中的对象池和JITA

对象池(Object Pooling)和即时激活(Just In Time Activation)COM+提供的两种不同的实例管理机制。似乎有很多人对COM+中的对象池和JITA的设计思想不太了解,甚至有所误解,这里随便说几句。 池(Pooling)是一种很常见的设计思想,池即缓冲,对象池COM+对象(必须是可以池化的)的缓冲区。一般认为,所谓池化缓冲用以优化访存效率,然后我觉得这...

weixin_34367257的博客 225

模仿COM架构+源码

一:区分组建与对象      组件(Component)是系统中一种物理的、可代替的部件、它封装了实现并提供了一系列可用的接口。一个组件代表一个系统中实现的物理部分,包括软件代码(源代码,二进制代码,可执行代码)或者一些类似内容,如脚本或者命令文件。简而言之,组件就是对象,是对数据和方法的简单封装。     对象(Object)是指现实世界中客观存在的事物。     组件基于对象,同时又是对象的一...

我的SQL 1292

CComPtr

CComPtr是一个类,构造函数会把内部指针初始化为NULL。

lnwaycool的专栏 696

突破Java与Windows壁垒:JACOB 1.21全攻略与企业级实践

JACOB(Java-COM Bridge)是一款强大的跨平台解决方案,它通过JNI技术实现了Java与Windows COM组件的无缝通信,让开发者能够在Java应用中轻松调用COM自动化组件。无论是操作Office文档、控制Windows系统功能,还是与其他COM兼容程序交互,JACOB都提供了稳定高效的技术支持,支持x86和x64环境,兼容32位与64位JVM。 ## 🌟 JACOB核心

gitblog_09586的博客 446

WTF-Solidity 合约安全 S09:智能合约拒绝服务(DoS)漏洞原理、攻击复现与防御实战

本篇文章是 WTF-Solidity 合约安全系列的第 S09 讲,聚焦智能合约中的拒绝服务(Denial of Service,DoS)漏洞。文章以 NFT 项目 Akutar 因 DoS 漏洞锁死 11,539 ETH 的真实事故为引子,结合仓库中的漏洞合约 `DoSGame` 与攻击合约 `Attack` 的完整源码,逐行剖析"循环退款 + `call` 外部调用"为何会被恶意 `fallb

gitblog_00463的博客 65

AOP是什么? ( 转自 板桥里人 http://www.jdon.com 2004/01/09)

为什么要区分J2EE容器和J2EE应用系统?  我们知道,J2EE应用系统只有部署在J2EE容器中才能运行,那么为什么划分为J2EE容器和J2EE应用系统? 通过对J2EE容器运行机制的分析(见我的电子教材“EJB实用原理”),我们可以发现:实际上J2EE容器分离了一般应用系统的一些通用功能,例如事务机制、安全机制以及对象池或线程池等性能优化机制。  这些功能机制是每个应用系统几乎都需要的

Ryan76的专栏 999

技术解析:Ajv JSON Schema验证器的架构设计与性能优化策略

在当今数据驱动的应用开发中,JSON Schema验证器已成为确保数据一致性和完整性的核心组件。Ajv(Another JSON Schema Validator)作为目前性能最优的JavaScript JSON Schema验证库,支持从draft-04到2020-12的所有JSON Schema标准以及RFC8927 JSON Type Definition规范。其独特的代码生成架构和优化策略

gitblog_00984的博客 313

如何用HTML5 Animation创建流畅的Canvas游戏动画:终极指南

HTML5 Canvas动画技术为现代网页游戏开发提供了强大的基础框架。通过JavaScript与Canvas API的结合,开发者可以创建出流畅、交互性强的游戏动画效果。本文将为您详细介绍如何利用HTML5 Animation技术构建专业的Canvas游戏动画,从基础概念到高级技巧,帮助您快速掌握这一强大的前端动画技术。 ## HTML5 Animation项目概述 这个HTML5动画项目提

gitblog_00091的博客 514

Apache Fesod替代EasyExcel的实战指南:复杂Excel解析优化

Excel解析是Java企业级系统中高频但易被低估的核心能力,涉及结构化数据读写、内存管理与业务语义映射。传统方案如EasyExcel基于POJO声明式映射,在简单二维表格场景下高效,但面对多级合并表头、嵌套子表、字段级权限及千万级分片导入时,常因全量加载导致OOM与解析错位。Apache Fesod以坐标空间建模、流式片段缓存和DSL模板引擎为技术支点,实现内存可控(峰值降低78%)、语义鲁棒(支持XPath动态定位表头)与高吞吐(导入提速292%)。本文聚焦Java生态下复杂Excel批处理的工程落地,

weixin_34208283的博客 270

Telegraf v1.13 及更早版本发布记录全解:从 v0.1.1 到 v1.13.4 的版本演进与升级避坑指南

本文以 Telegraf 仓库中的历史变更记录 [CHANGELOG-1.13.md](https://link.gitcode.com/i/fc9cee8ae1b90148ef9daff5c89d86c3) 为主体,系统梳理 2015 年 6 月首个版本 v0.1.1 至 2020 年 2 月 v1.13.4 之间全部发布记录的演进脉络:每个大版本引入了哪些插件与核心能力、哪些变更属于破坏性变更

gitblog_00385的博客 426

Quant-Noise 量化噪声训练全指南:基于 fairseq 的 int8 标量量化与迭代乘积量化(iPQ)实现极端模型压缩

Quant-Noise(Quantization Noise)是论文 *Training with Quantization Noise for Extreme Model Compression*(Fan & Stock et al., 2020)提出的训练时量化噪声注入技术:在训练阶段随机量化一部分权重,让模型对量化误差产生鲁棒性,从而显著提升推理期量化(int8 标量量化或迭代乘积量化 iP

gitblog_00747的博客 242

吉里吉里Z Project全面解析:从起源到核心功能的终极指南

吉里吉里Z Project是日本视觉小说和游戏开发领域的知名开源引擎,作为吉里吉里2的fork项目,它提供了完整的游戏开发框架。这个强大的**吉里吉里Z引擎**专为创建视觉小说、冒险游戏和互动故事而设计,支持Windows平台并具备跨平台扩展能力。无论你是游戏开发新手还是经验丰富的开发者,掌握吉里吉里Z都能为你的创意项目带来无限可能。 ## 📚 项目起源与发展历程 吉里吉里Z Project

gitblog_00824的博客 364

C# AI插件权限管理:基于ABAC与沙箱的细粒度安全架构设计

在软件架构中,插件机制是实现功能扩展和模块化的关键技术,它允许应用程序动态加载外部代码模块,实现热插拔功能。其核心原理是通过接口抽象和依赖注入,使宿主程序与插件之间解耦。这项技术的工程价值在于提升系统的灵活性和可维护性,尤其在AI能力集成、自动化工具等场景中至关重要。然而,插件化也引入了安全风险,特别是当插件需要访问文件系统、网络或敏感API时,必须实施严格的访问控制。基于属性的访问控制(ABAC)和沙箱隔离是解决这一问题的核心方案,它们通过对操作主体、资源、环境等多维度属性进行动态策略评估,实现细粒度的权

weixin_30580341的博客 477

浏览器内运行的AI助手:全本地化语音交互实现原理

浏览器端AI是指在用户设备本地完成语音识别、意图理解与网页操作的智能代理技术,其核心原理是将传统依赖云端API的AI工作流(如ASR、NLP、TTS)通过WebAssembly、WebGPU和ONNX Runtime等现代Web标准重构为纯前端可执行模块。该技术显著提升隐私性与实时性,避免数据外传与网络延迟不确定性,同时降低电池与带宽消耗。典型应用场景包括无障碍浏览、离线语音控制、老年/残障用户友好交互及高敏感环境下的安全操作。Hey AI Browser-Native Copilot正是这一范式的工程实践

weixin_34319374的博客 390
上一篇: 实战COM(08)----COM+的特性之事务、及时激活
下一篇: Windows CE/Pocket PC安装盘的制作
blackcolor
博客等级 码龄26年 1粉丝 10原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值