需要理解的知识
* com组件原理及应用
1. IUnknown , IDiapatch ...
2. 接口的指针指向接口这个结构,接口里面保存一个虚函数表指针,指向接口里的函数。
3. 接口的使用
+ 通过queryInterface (必须是同一个组件)
+ 通过上一级接口的方法得到
+ 通过某些某些接口的方法得到
SOLIDWORKS环境配置
安装apisdk 后 打开vs新建工程时会有向导可以新建solidworks项目
新建后需要配置下项目:
![](https://img.laitimes.com/img/__Qf2AjLwojIjJCLyojI0JCLiAzNfRHLGZkRGZkRfJ3bs92YsYTMfVmepNHLxkERNdXWq10dRpHW4Z0MMBjVtJWd0ckW65UbM5WOHJWa5kHT20ESjBjUIF2X0hXZ0xCMx81dvRWYoNHLrdEZwZ1Rh5WNXp1bwNjW1ZUba9VZwlHdssmch1mclRXY39CXldWYtlWPzNXZj9mcw1ycz9WL49zZuBnLzkDN5UTN1ATM4ADNwEjMwIzLc52YucWbp5GZzNmLn9Gbi1yZtl2Lc9CX6MHc0RHaiojIsJye.png)
编译这个模板项目会出现
继续编译完成。 编译时需要关闭solidworks
注意!! 直接用solidrorks打开生成的dll会注册失败,编译成dll后,需要注册到注册表 才能被使用。
需要用管理员身份注册
接口也可以通过api文档下面这个提示来知道怎么获取
第一个项目
既然都已经有模板项目了,再在这个模板项目上进行修改就可以了。
- 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;
}
- solidwork 直接添加一个dll会自动加一个工具栏,不要试图在代码里加,加不了 有血缘关系的接口指针 , 比如newPart() 得到的是dispatch的指针,但是实际上得到part,而part和modelDoc2有血缘关系,所以可以直接 代码如下:
SOLIDWORKS 二次开发 VC++需要理解的知识SOLIDWORKS环境配置第一个项目
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这种都是工具集不匹配问题,改项目配置文件,改成自己的工具集。