跳转至

博客

使用 C++ 实现 COM 组件的示例

COM(Component Object Model)是微软提出的用于构建组件化应用程序的标准。COM 允许不同编程语言编写的组件进行互操作。本文将展示如何用 C++ 创建和使用 COM 组件,涵盖接口定义、组件实现、引用计数、对象创建等基本概念。

1. 定义接口

在 COM 编程中,接口是定义组件之间交互的核心部分。所有的 COM 接口都必须继承自 IUnknown 接口,它提供了基本的引用计数和接口查询功能。

下面我们定义一个简单的接口 IHello,它包含一个方法 Hello 用于打印消息。

// IHello.h
#ifndef IHELLO_H
#define IHELLO_H

#include <objbase.h>

// 定义 IHello 接口
class IHello : public IUnknown {
public:
    virtual void Hello() = 0;
};

// 定义 IHello 的 GUID
// {D77A85A0-68F7-4F0C-9B5A-A6D84236A2D1}
DEFINE_GUID(IID_IHello, 
0xd77a85a0, 0x68f7, 0x4f0c, 0x9b, 0x5a, 0xa6, 0xd8, 0x42, 0x36, 0xa2, 0xd1);

#endif

在这段代码中,我们定义了一个接口 IHello,它继承自 IUnknown 并包含一个 Hello 方法。DEFINE_GUID 宏用于生成接口的唯一标识符(GUID),该标识符在 COM 中用于区分不同的接口。

深入了解 COM(Component Object Model)

COM(Component Object Model)是微软提出的一种二进制接口标准,允许不同编程语言编写的组件之间进行互操作。它的设计初衷是使得不同的应用程序可以使用和共享不同语言编写的组件。COM 作为一种中间层协议,定义了组件的交互接口,并通过它实现不同组件间的通信。

当时只道是寻常

浣溪沙 纳兰容若

谁念西风独自凉,萧萧黄叶闭疏窗,沉思往事立残阳。

被酒莫惊春睡重,赌书消得泼茶香,当时只道是寻常。

那些我们习以为常的日子,那些眼前的普通人,可能在某一天,都是你人生回忆里的美好,所以朋友啊,珍稀当下,珍惜眼前人。

理解 Go 语言中的 NoCopy 机制

在 Go 语言中,NoCopy 是一种通过嵌入字段来防止结构体被拷贝的技巧。这种机制广泛应用于需要避免结构体拷贝的场景,例如同步原语或特定的资源管理。

NoCopy 的作用

NoCopy 的作用并非直接阻止结构体被拷贝,而是通过以下两种方式帮助开发者:

  1. 开发约定:通过代码设计提醒开发者这个结构体或其字段不应该被拷贝。
  2. 静态检查:借助工具(如 go vet),检测代码中是否有拷贝 NoCopy 类型的行为,从而提示潜在问题。

理解 Go 语言中结构体拷贝和锁的行为

在 Go 语言中,结构体的拷贝是一个常见的操作,但是当结构体中包含复杂字段(如指针或 sync.Mutex)时,其行为可能会带来一些意想不到的问题。本文将通过几个具体问题,带你深入了解结构体拷贝、锁的独立性,以及这些设计的背后逻辑。

深入理解 Go 的原子操作与 unsafe.Pointer

在高并发编程中,原子操作是一种关键技术,用于确保多线程环境下对共享资源的安全操作。本文将深入探讨 Go 中原子操作的原理,为什么需要使用 unsafe.Pointer,以及这些操作如何与底层 CPU 的指令配合实现线程安全。

无锁编程:内存屏障与无锁栈、队列的实现

在多核处理器和高并发编程中,性能优化是非常重要的一个方向,尤其是在处理共享资源的访问时。传统的锁(如 sync.Mutex)虽然能够保证线程安全,但会带来显著的性能开销。为了应对高并发场景下的性能瓶颈,无锁编程技术应运而生,其中包括原子操作、内存屏障、无锁栈和无锁队列的实现。本文将详细介绍这些概念以及它们的实现方式。

读写分离 sync.Map

sync.Map 是 Go 语言中的一个并发安全的映射(map)实现,设计目的是为了在高并发环境下提高读操作的性能。它支持读写分离,以优化读操作的性能,同时保持对写操作的安全性。以下是 sync.Map 的详细解释及其读写分离特性:

1. sync.Map 概述

sync.Map 是 Go 1.9 及以后版本引入的一个并发安全的映射类型,提供了以下特性:

  • 并发安全sync.Map 支持并发读写操作,读操作和写操作都能安全地在多个 Goroutine 中进行。
  • 读写分离sync.Map 内部实现优化了读操作的性能,特别是在高并发场景下。

读写锁(sync.RWMutex)的底层实现原理

Go 语言中的读写锁(sync.RWMutex)是一种同步原语,用于控制多个 Goroutine 对共享资源的并发访问。读写锁允许多个 Goroutine 同时进行读操作,但在写操作进行时,所有其他 Goroutine(包括读操作和写操作)都被阻塞。理解读写锁的实现及底层原理有助于高效地使用它。

长连接与短链接的学习

在网络编程中,长连接和短连接是两种常见的连接方式,它们在客户端和服务器之间的通信方式上有所不同,适用于不同的场景。Golang 提供了默认的长连接支持,通过合理配置,可以在不同的需求场景下灵活应用。