关于COM组件queryInterface的需求思考

本文探讨了在COM组件中queryInterface接口的作用和重要性。当动态库发生改动时,通过封装构造函数和类型转换,利用queryInterface实现旧代码与新库的兼容,避免重新编译可执行文件。文章通过具体场景分析了queryInterface如何解决内存分布改变导致的错误,阐述了其实现原理。
摘要由CSDN通过智能技术生成

背景

项目上遇到一份老代码的框架,其中有queryInterface的接口看着让人无所适从,查阅了com组件的一些资料后,做一个简单的总结。

场景

你有一份代码main.cpp编译出可执行文件A,依赖于libs.cpp编译出来的动态库B。编译完成后,动态库做了一些改动,重新编译后推到系统lib64文件夹内。试下想A是否能正常运行?

开始时状态是这样的:

// libs.cpp
Class MyBaseClass {
   
public:
	virtual void doSth();
private:
	int valA;
};

Class MyClass : public MyBaseClass {
   
public:
	virtual void doSth() override
	{
   
		...
	}
};
// main.cpp

int main()
{
   
	MyClass* tmp = new MyClass();
	MyBaseClass* p = static_cast<MyBaseClass*>(tmp);
	p->doSth();
	return 0;
}

可执行文件A编译完后,不作改动。libs.cpp改动后重新编译,改动如下:

// libs.cpp
Class MyBaseClass {
   
	
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值