COM开发:类厂与实例连接详解 - 使用ATL与MFC

需积分: 10 3 下载量 33 浏览量 更新于2024-08-19 收藏 447KB PPT 举报
本文档主要探讨了COM(Component Object Model)在Windows编程中的关键概念,特别是类工厂(Class Factory)和类实例的连接机制。作者通过介绍Win32 SDK(Software Development Kit)和MFC(Microsoft Foundation Classes)在COM开发中的角色,深入剖析了如何利用这两个工具来构建和管理分布式组件。 首先,Win32 SDK是Windows应用程序的基础,它提供了支持COM的核心库函数,包括Unknwn.h中的IUnknown和IClassFactory接口定义,这些接口是COM通信的基础。Wtypes.h、Objidl.h和Comdef.h等头文件则分别定义了COM的数据结构、标准接口以及CLSID(Class ID)和COMAPI函数。 MFC是Microsoft为简化Windows应用程序开发而设计的框架,它在一定程度上内置了对COM的支持,使得开发者可以更方便地创建和使用COM组件。MFC中的CComClassFactory类是关键,其成员m_pfnCreateInstance允许开发者指定实例化对象的函数,类工厂的CreateInstance方法会调用这个函数来创建新的类实例。 对于类实例的创建,有两种模式:in-proc server(进程内服务器)和out-of-proc server(进程外服务器)。in-proc server使用DllGetClassObject函数,在同一进程内创建对象;out-of-proc server则需要先通过RegisterClassObject注册类工厂,然后在其他进程中通过该工厂创建对象,这种方式有利于模块间的解耦和性能优化。 ATL(Active Template Library)是另一种扩展COM功能的工具,它提供了更底层的接口,使开发者能够更灵活地创建高性能的COM组件。ATL中的宏如DECLARE_INTERFACE_用于简洁地描述接口,使得接口声明更为直观和易读。 最后,文档还提到了Visual C++(VC)中的相关宏,这些宏进一步简化了接口的定义过程,并且强调了与COM接口相关的宏的使用。 本文档围绕类工厂与类实例的连接,展示了如何在Win32 SDK、MFC和ATL环境下利用COM技术进行高效、模块化的软件开发,这对于理解和实践COM开发有着重要的指导意义。

/app/jdk1.8.0_192/bin/java -cp /app/BES-CLUSTER-951/node-172.16.100.235/patch/V9.5.1.2539.002.jar:/app/BES-CLUSTER-951/node-172.16.100.235/patch/V9.5.1.2539.001.jar:/app/BES-CLUSTER-951/node-172.16.100.235/lib/*:/app/BES-CLUSTER-951/node-172.16.100.235/lib/3rd/*: -Dcom.bes.enterprise.stopAgentTimeout=180 -Dclient.ssl.keyStorePassword={AES}PrzBD+FLE0Wheq7AAaghXw== -Dcom.bes.enterprise.nodeagent.process.timeout=180 -Dclient.ssl.keyStore=${com.bes.installRoot}/conf/security/client.p12 -Dclient.ssl.keyStoreType=PKCS12 -Dcom.bes.enterprise.startAgentTimeout=180 -Dcom.bes.enterprise.async.event.retainResultTimeout=300 -Djava.security.egd=file:/dev/./urandom -XX:+UnlockDiagnosticVMOptions -XX:MetaspaceSize=1028m -XX:NewRatio=2 -XX:HeapDumpPath=/toptdata/besServerLog/node-172.16.100.235/logs/dump/ -XX:LogFile=/toptdata/besServerLog/node-172.16.100.235/logs/jvm.log -XX:+HeapDumpOnOutOfMemoryError -XX:-UseVMInterruptibleIO -XX:MaxMetaspaceSize=2048m -XX:+LogVMOutput -Xmx4096m -Xms2048m -server -Djava.endorsed.dirs=/app/BES-CLUSTER-951/node-172.16.100.235/lib/endorsed -Dcom.bes.javaRoot=/app/jdk1.8.0_192 -Dcom.bes.installRoot=/app/BES-CLUSTER-951/node-172.16.100.235 -Dcom.bes.instanceRoot=/app/BES-CLUSTER-951/node-172.16.100.235 -Djava.awt.headless=true -Djava.ext.dirs=/app/jdk1.8.0_192/lib/ext:/app/jdk1.8.0_192/jre/lib/ext:/app/BES-CLUSTER-951/node-172.16.100.235/lib/ext -Djava.net.preferIPv4Stack=true -Djava.library.path=/app/BES-CLUSTER-951/node-172.16.100.235/lib:/usr/java/packages/lib/amd64:/usr/lib64:/lib64:/lib:/usr/lib com.bes.enterprise.nodeagent.bootstrap.NodeAgentMain start --startinstances=false --restartinstances=true --monitorinterval=5 --syncinstances=true -instancedir /app/BES-CLUSTER-951/node-172.16.100.235 -verbose false -debug false -nodename node-172.16.100.235 -read-stdin true

2023-06-02 上传