需要了解的知識
* com元件原理及應用
1. IUnknown , IDiapatch ...
2. 接口的指針指向接口這個結構,接口裡面儲存一個虛函數表指針,指向接口裡的函數。
3. 接口的使用
+ 通過queryInterface (必須是同一個元件)
+ 通過上一級接口的方法得到
+ 通過某些某些接口的方法得到
SOLIDWORKS環境配置
安裝apisdk 後 打開vs建立工程時會有向導可以建立solidworks項目
建立後需要配置下項目:
編譯這個模闆項目會出現
繼續編譯完成。 編譯時需要關閉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有血緣關系,是以可以直接 代碼如下:
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這種都是工具集不比對問題,改項目配置檔案,改成自己的工具集。