Catia二次开发QueryInterface的操蛋问题

Catia二开很痛苦,明明已经找到接口类,但是却不知道怎么获得这个接口类的对象。

例如获得一个部件的体积,找到相关接口CATIAAnalyze,但是这个部件的CATIAAnalyze的对象不知道如何获取。一般是这样获取一个对象:

CATIAAnalyze* pAnalyze = NULL;
XXX->QueryInterface(IID_CATIAAnalyze, (void**)&pAnalyze);

但是QueryInterface左边的这个XXX不知道是什么鬼,找了一下CATIAAnalyze的文档,也没有看出什么玩意儿!真服了达索这些傻逼,文档不给全。

探索了很久,尝试录制宏,打开部件属性窗口,然后随意设置一些属性(必须改变一些东西才能录制成功,否则不会录制到任何东西),再看录制的结果,发现原来CATIAAnalyze是从Product那里来的

发现有一个Product关键字,猜想 QueryInterface左边的这个XXX应该就是一个Product对象吧,玛德全靠猜。尝试一下在VBA里点一下

好像是的,写C++代码:

    CATFrmEditor* pFrmEditor = NULL;
	pFrmEditor = CATFrmEditor::GetCurrentEditor();
	if (NULL == pFrmEditor)
	{
		return;
	}

	//获取当前编译器对应的CATDocument
	CATDocument* pDoc = NULL;
	pDoc = pFrmEditor->GetDocument();

	//获得Editor、获得Document、获得DocumentRoot
	CATIDocRoots* pDocRootsOnDoc = NULL;
	CATBaseUnknown_var spBaseTemp = NULL;
	HRESULT rc = E_FAIL;
	rc = pDoc->QueryInterface(IID_CATIDocRoots, (void**) &pDocRootsOnDoc);
	if (!pDocRootsOnDoc)
		return;
	
	CATListValCATBaseUnknown_var* pRootProducts = pDocRootsOnDoc->GiveDocRoots();
	if (NULL != pRootProducts)
	{
		if (pRootProducts->Size())
		{
			spBaseTemp = (*pRootProducts)[1];
		}
		delete pRootProducts;
		pRootProducts = NULL;
	}
	pDocRootsOnDoc->Release();
	pDocRootsOnDoc=NULL;
	if (!spBaseTemp)
		return;
	CATIProduct_var prd = spBaseTemp;
	CATIAAnalyze* pAnalyze = NULL;
	prd->QueryInterface(IID_CATIAAnalyze, (void**)&pAnalyze);

总结一下,写Catia二开代码,就像漂亮国那款《莫里秀》 又名《爸爸死哪了》的综艺节目,大部分时间都是在找爸爸!玛德去死吧。

  • 10
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值