SOLIDWORKS 二次开发 VC++

本文详细介绍了SolidWorks的COM组件原理,包括IUnknown和IDispatch接口,以及如何通过queryInterface获取接口。讲解了SOLIDWORKS环境配置,如API SDK安装和项目配置,强调了编译DLL后需要注册到注册表。还展示了如何创建插件,添加命令回调,并给出了创建立方体和显示PMP的示例代码。同时,提到了在事件处理和错误排查中的注意事项,如避免死循环和处理选择轴的问题。此外,还分享了解决打开DLL失败和工具集不匹配的解决方案,以及将VBA代码转换为C++代码的方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

需要理解的知识

* com组件原理及应用
	1. IUnknown , IDiapatch  ...
	2. 接口的指针指向接口这个结构,接口里面保存一个虚函数表指针,指向接口里的函数。
	3. 接口的使用
		+ 通过queryInterface  	(必须是同一个组件)
		+ 通过上一级接口的方法得到
		+ 通过某些某些接口的方法得到

SOLIDWORKS环境配置

安装apisdk 后 打开vs新建工程时会有向导可以新建solidworks项目
新建后需要配置下项目:
在这里插入图片描述
编译这个模板项目会出现 在这里插入图片描述
继续编译完成。 编译时需要关闭solidworks
注意!! 直接用solidrorks打开生成的dll会注册失败,编译成dll后,需要注册到注册表 才能被使用。
需要用管理员身份注册在这里插入图片描述
接口也可以通过api文档下面这个提示来知道怎么获取
在这里插入图片描述

第一个项目

既然都已经有模板项目了,再在这个模板项目上进行修改就可以了。
  1. Add-in Callback and Enable Methods (先添加cmd cmd可以绑定工具栏和菜单)
cmdIndex0 = cmdGroup.AddCommandItem2("CreateCube", -1, "Create a cube", "Create cube", 0, "CreateCube", "EnableCube", mainItemID1, menuToolbarOption);
#Region UI Callbacks

public void CreateCube
{
    // Create Cube command code
}
public int EnableCube
{
    // Return status of the Create Cube enablement
    return 0;
}

public void ShowPMP
{
    // Show PMP command code
}
public int EnablePMP
{
    // Return status of Show PMP enablement
    return 0;
}

  1. solidwork 直接添加一个dll会自动加一个工具栏,不要试图在代码里加,加不了
    在这里插入图片描述
    有血缘关系的接口指针 , 比如newPart() 得到的是dispatch的指针,但是实际上得到part,而part和modelDoc2有血缘关系,所以可以直接 代码如下:
	CComPtr <IModelDoc2> modelDoc2Ptr;
	CComPtr <IDispatch> disPathchPtr;
	gSwApp->NewPart(&disPathchPtr);
	modelDoc2Ptr = disPathchPtr;
	long docType;
	modelDoc2Ptr->GetType(&docType);
	if (docType == swDocPART)
	{
		AfxMessageBox(L"这是个零件");
	}

有时候需要像下面这样用
在这里插入图片描述
下面这样是错误的
在这里插入图片描述
而且下面这种也是可以的, 注释的是不可以的编译不过。
在这里插入图片描述

这里一定要置空,不然会死循环,next函数不会帮你置空。
在这里插入图片描述

事件
在这里插入图片描述

调用IGetRefAxisParams()前不要select轴,不然会调用失败导致获取不了轴得两个端点

solidworks二次开发问题解决:
1.打开dll无法启动插件,此时需要注册插件才能打开。
2.需要什么什么.140msu.lib这种都是工具集不匹配问题,改项目配置文件,改成自己的工具集。
3.关于需要把VBA的代码转成C++的代码
可以先把功能录制下来,比如 需要用C++实现创建边线法兰特征,效果如下
C++创建的边线法兰

  • 3.1 边线法兰的创建需要 手动选择一条边,并创建法兰需要的参考草绘,设置好折弯半径,法兰长度即可。

  • 3.2 录制宏后发现没有没有有用的代码。

  • 在这里插入图片描述

  • 3.3 此时只能通过查看api文档找到 边线法兰的函数在这里插入图片描述
    查看对应的vba实现
    在这里插入图片描述
    执行此代码,创建成功,转成成C++代码如下

//法兰参考的草绘
	CComPtr<IDispatch> pDisSketch
	//插入法兰草绘  这里aComp代表模型对象,m_pDoc是当前模型的ModelDoc
	aComp.m_pDoc->InsertSketchForEdgeFlange(aEdge.m_pEdge, PI /  2, VARIANT_FALSE, &pDisSketch);
	if (pDisSketch == NULL) return false;
	//如果成功,则获取草绘特征
	CComPtr<IFeature> pSketFeat;
	pDisSketch->QueryInterface(IID_IFeature, (void**)&pSketFeat);
	//选中草绘特征,进行编辑,加入草绘线
	m_pFeat->Select2(.)
	aComp.m_pDoc->EditSketch();
	CComPtr<ISketch> pSketch = NULL;
	VARIANT_BOOL ret;
	if (aComp. m_pSketMgr->get_ActiveSketch(&pSketch) != S_OK || pSketch == NULL) return false;
	//选中边转换实体
	CSwSelection edgeSel;
	selectById2(); 
	aComp.m_pSketMgr->SketchUseEdge(VARIANT_FALSE, &ret);
	VARIANT segMents;
	pSketch->GetSketchSegments(&segMents);
	vector<CAdapt<CComQIPtr<IDispatch>>> resutlarr;
	//segMents转restlarr 
	CComPtr<ISketchLine> pLine;
	resutlarr[0]->QueryInterface(IID_ISketchLine, (void**)&pLine);
	CComPtr<ISketchPoint> pStartPt;
	CComPtr<ISketchPoint> pEndPt;
	pLine->IGetStartPoint2(&pStartPt);
	pLine->IGetEndPoint2(&pEndPt);
	//自己根据起始点增加线段
	CreateLine 省略
	//创建法兰
	VARIANT edges;
	VARIANT sket
	//省略 edges 选中的边的IEdge转成IDispatch放入
	//省略 sket   草绘pSketch转成IDispatch放入
	CComPtr<IFeature> pEdgeFlange;
	aComp.m_pFeatMgr->InsertSheetMetalEdgeFlange2(edges,	sketfeats,
		nOptions,
		dAngle,
		dRadius, (int)swFlangePositionTypeMaterialInside, dLength, (int)swSheetMetalReliefNone, 0.0, 0.0,0.0, 	(int)swFlangeDimTypeInnerVirtualSharp, NULL, &pEdgeFlange);
	
### 回答1: SolidWorks C#二次开发是指开发一些符合客户需求的软件程序,并与SolidWorks软件进行交互,从而实现自动化设计、减少重复性任务等目的。在二次开发过程中,通常需要了解SolidWorks API接口、C#语言以及相关的工程学知识,以满足客户的具体需求。 SolidWorks API接口是SolidWorks软件提供的应用程序接口,提供了基于COM(Component Object Model)架构的接口,以便C#开发人员能够对SolidWorks数据进行操作。通过API接口,二次开发人员可以对SolidWorks软件进行定制化,包括创建和修改零件、装配、图纸等。 C#语言是Microsoft公司开发的一种基于对象的编程语言,可以在.NET框架下运行。C#语言结构类似于C++语言,但是具有更加严格的类型安全和内存安全特性。在二次开发中,C#语言可以用于重写SolidWorks自带的VB.NET宏、编写SolidWorks插件、开发Windows应用程序等,从而使SolidWorks软件具有更为便捷和高效的使用体验。 总体来说,SolidWorks C#二次开发为客户提供了更多个性化定制化的需求和服务,增强了SolidWorks软件的功能和使用价值。同时,也为开发人员提供了很好的机会去探索和实践这些技能和知识,在软件开发领域发展自己的技术水平。 ### 回答2: SolidWorks是一种3D机械CAD软件,可以用于产品设计和工程。SolidWorks C是SolidWorks的API包,提供了一些C++语言的类和函数,允许您通过编程来扩展SolidWorks的功能和自定义应用。二次开发就是利用SolidWorks C API来创建自己的插件或外部应用程序,以改善工作流程或自动化任务。 二次开发的步骤通常包括定义你想要实现的功能,然后学习SolidWorks C API,编写代码,调试代码并创建部署解决方案。你可以创建自定义插件来完成诸如创建定制模型和零部件,自动化重复性任务,生成报告等任务,从而提高生产率并节省时间和成本。 SolidWorks C API非常强大和灵活,可以用于许多不同的应用程序。因此,如果你有足够的编程经验和SolidWorks知识,你可以创建高度定制的解决方案,帮助你节省时间和成本,同时增加工作的质量。二次开发可以改变整个生产流程,使您的业务能够更快速、高效地创造出令人印象深刻的成果。 ### 回答3: Solidworks是一种CAD软件,是用于机械设计和制造的最流行的工具之一。Solidworks C二次开发则是指基于Solidworks C++ API(应用程序接口)进行的开发。通过该API,用户可以自定义特定功能,满足特定的需求,和 Solidworks本身相比,二次开发的优势在于用户可以快速、准确地进行设计和分析。 Solidworks C二次开发主要使用的编程语言是C++,因此对于想要在Solidworks上进行开发的用户,需要具备一定的C++编程知识。不过,对于熟悉C++语言的开发者来说,使用Solidworks C++ API进行开发是一件非常容易的事情。 二次开发的主要目的是将Solidworks的功能扩展到用户需要的领域上。例如,用户可以开发自己的插件,添加新的设计工具和自定义功能,从而增强Solidworks的设计能力。此外,还可以创建自己的应用程序,用于与Solidworks进行交互,并实现特定的应用需求。 在实际应用中,Solidworks C二次开发可以被用于各种工业和研究领域,如机械设计、汽车工程、航空航天、医疗设备、海洋技术等。总的来说,Solidworks C++二次开发为用户提供了一个自定义设计工具的平台,是一个非常强大和有用的工具。
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值