佚名通过本文主要向大家介绍了com error无效指针,7tav.com视频 杂类,7tav.com杂类,检索com类工厂中clsid,com类工厂中clsid为等相关知识,希望对您有所帮助,也希望大家支持linkedu.com www.linkedu.com
问题: 在COM中如何得到复合类指针?
描述:
解决方案1:
描述:
//car.h文件内容
#pragma once
class CCar
{
public:
CCar(void);
~CCar(void);
public:
int m_number;
struct XCar{
inline CCar* This(void)
{
return (CCar*)((char*)this - offsetof(CCar, m_xCar));
}
};
XCar m_xCar;
};
//car.cpp文件内容
#include "StdAfx.h"
#include "car.h"
CCar::CCar(void)
{
}
CCar::~CCar(void)
{
}
我写了上面的一个类,然后创建这个类的实例CCar m_car,然后调用m_car.m_xCar.This()能够返回m_car这个类实例的地址,
请问为什么从(CCar*)((char*)this - offsetof(CCar, m_xCar))可以返回类实例的地址?
解决方案1:
对
你可以去msdn看看offsetof的说明
因为在return (CCar*)((char*)this - offsetof(CCar, m_xCar));
中的this指向的是m_xCar,把这个地址减去m_xCar在CCar中的地址偏移量就得到了指向CCar的地址
然后强制转化就可以了