dynamic_cast 跨模块使用失败

问题描述

Qt for Android 环境下发现 dynamic_cast 转换失败,最终确认是因为跨模块的原因。即 communicate 模块中的指针在 machine 模块中进行转换时会失败,在本模块中没有问题。

解决方法

由类内部提供接口转换后返回,再到 NetworkP53 类中实现其接口。

// ICommunicate.h
class ICommunicate
{
public:
    // Qt Android 下跨模块使用 dynamic_cast 失败,由内部转换后提供
    virtual IDCCommunicate* toDCCommunicate() = 0;
    virtual IExCommunicate* toExCommunicate() = 0;
}

void createDiam(tag_t viewTag, tag_t bodyTag, tag_t edge1, tag_t edge2, double fristEdgeP1[3], double secondEdgeP1[3], double dimOrigin[3]) { NXOpen::Session* theSession = NXOpen::Session::GetSession(); NXOpen::Part* workPart(theSession->Parts()->Work()); NXOpen::Part* displayPart(theSession->Parts()->Display()); NXOpen::Annotations::RapidDimensionBuilder* dimBuilder = workPart->Dimensions()->CreateRapidDimensionBuilder(nullptr); NXOpen::Annotations::Dimension* nullNXOpen_Annotations_Dimension(NULL); NXOpen::Annotations::RapidDimensionBuilder* rapidDimensionBuilder1; rapidDimensionBuilder1 = workPart->Dimensions()->CreateRapidDimensionBuilder(nullNXOpen_Annotations_Dimension); rapidDimensionBuilder1->Driving()->SetDrivingMethod(NXOpen::Annotations::DrivingValueBuilder::DrivingValueMethodReference); NXOpen::View* nullNXOpen_View(NULL); rapidDimensionBuilder1->Measurement()->SetDirectionView(nullNXOpen_View); rapidDimensionBuilder1->Style()->DimensionStyle()->SetNarrowDisplayType(NXOpen::Annotations::NarrowDisplayOptionNone);//标注尺寸在线上 NXOpen::Drawings::BaseView* baseView1(dynamic_cast<NXOpen::Drawings::BaseView*>((NXObjectManager::Get(viewTag)))); NXOpen::Drawings::DraftingBody* draftingBody1(dynamic_cast<NXOpen::Drawings::DraftingBody*>(NXObjectManager::Get(bodyTag))); NXOpen::Drawings::DraftingCurve* draftingCurve1(dynamic_cast<NXOpen::Drawings::DraftingCurve*>(NXObjectManager::Get(edge1))); NXOpen::Point3d point1(fristEdgeP1[0], fristEdgeP1[1], fristEdgeP1[2]); NXOpen::Point3d point(0.0, 0.0, 0.0); //rapidDimensionBuilder1->FirstAssociativity()->SetValue(NXOpen::InferSnapType::SnapTypeMid, draftingCurve1, baseView1, point1, NULL, nullNXOpen_View, point); rapidDimensionBuilder1->FirstAssociativity()->SetValue(draftingCurve1, baseView1, point1); NXOpen::Drawings::DraftingCurve* draftingCurve2(dynamic_cast<NXOpen::Drawings::DraftingCurve*>(NXObjectManager::Get(edge2))); NXOpen::Point3d point1_3(secondEdgeP1[0], secondEdgeP1[1], secondEdgeP1[2]); NXOpen::Point3d point2_3(0.0, 0.0, 0.0); rapidDimensionBuilder1->SecondAssociativity()->SetValue(NXOpen::InferSnapType::SnapTypeMid, draftingCurve2, baseView1, point1_3, NULL, nullNXOpen_View, point2_3); NXOpen::Point3d point2(dimOrigin[0], dimOrigin[1], 0.0); rapidDimensionBuilder1->Origin()->Origin()->SetValue(NULL, nullNXOpen_View, point2);//标注原点 NXOpen::NXObject* nXObject1; nXObject1 = rapidDimensionBuilder1->Commit(); } 以上代码的 NXOpen::Drawings::DraftingBody* draftingBody1(dynamic_cast<NXOpen::Drawings::DraftingBody*>(NXObjectManager::Get(bodyTag))); NXOpen::Drawings::DraftingCurve* draftingCurve1(dynamic_cast<NXOpen::Drawings::DraftingCurve*>(NXObjectManager::Get(edge1)));是什么,该怎么获取参数
03-16
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

ALONE_WORK

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值