一般常用的工具開發都是結合界面交互的,這種叫內部開發模式,編譯生成的是dll動態鏈接庫。
有些工具,只需要做後臺計算,不需要與界面交互。也就是不打開NX,去執行NX的一堆API操作。這種叫外部開發模式,編輯生成的是exe應用程序。
以一個 新建prt-創建塊-保存prt 爲例。
1.新建項目(不管是用C的嚮導模板還是C++得嚮導模板,都是一樣的,只要選擇EXE類型)
編譯成功
2.添加源代碼(和內部開發模式是一樣的,加頭文件,在對應位置處加執行功能的代碼)
1 //頭文件
2 #include <uf.h>
3 #include <uf_part.h>
4 #include <uf_modl.h>
5
6
7
8 UF_initialize();
9
10 //新建prt
11 tag_t prtTag = NULL_TAG;
12 UF_PART_new("D:\\123.prt", 1, &prtTag);
13
14 //創建塊
15 UF_FEATURE_SIGN Sign = UF_NULLSIGN;//設置布爾
16 double Corner_pt[3] = { 0.0, 0.0, 0.0 };//設置原點
17 char *Edge_Len[3] = { "100", "100", "100" };//設置長寬高
18 tag_t BlkTag = NULL_TAG;
19 UF_MODL_create_block1(Sign, Corner_pt, Edge_Len, &BlkTag);
20
21 //保存prt
22 UF_PART_save();
23
24
25 UF_terminate();
26
27 Caesar盧尚宇
28 2020年2月29日
3.配置所需的dll動態鏈接庫,執行exe
編譯代碼後,得到exe。
直接雙擊執行會報錯。那是因爲缺少NX的幾個dll動態鏈接庫
解決方法
1.將exe放到NX安裝目錄裏的D:\Program Files\Siemens\NX 11.0\NXBIN裏面。(NX11版本以下是放到UGII裏面的)
在雙擊執行exe,就不會報錯了。
2.打開電腦環境變量,在PATH環境變量里加上D:\Program Files\Siemens\NX 11.0\NXBIN
在雙擊執行exe,就可以執行了。
4.封裝,傳參調用
很多時候會把一堆功能封裝成一個exe,留幾個輸入參數,然後使用另一個程序去傳參調用。這裏我使用的是CommandLineToArgvW
1.加MFC頭文件,項目改成多字節
#include <afxwin.h>
修改上面的源代碼
重新添加代碼如下
1 UF_initialize();
2
3
4 LPWSTR *szArglist = NULL;
5 int nArgs = 0;
6 szArglist = CommandLineToArgvW(GetCommandLineW(), &nArgs);
7 if (NULL != szArglist)
8 {
9 //szArglist就是保存參數的數組
10 //nArgs是數組中參數的個數
11 //數組的第一個元素表示進程的path,也就是szArglist[0],其他的元素依次是輸入參數。
12 }
13 CString str1 = szArglist[1];
14 CString str2 = szArglist[2];
15 CString str3 = szArglist[3];
16 int L = atoi((LPSTR)(LPCTSTR)str1);
17 int W = atoi((LPSTR)(LPCTSTR)str2);
18 int H = atoi((LPSTR)(LPCTSTR)str3);
19 char msg[256];
20 sprintf_s(msg, "塊的長爲:%d,寬爲:%d,高爲:%d", L, W, H);
21 printf(msg);
22 //取得參數後,釋放CommandLineToArgvW申請的空間
23 LocalFree(szArglist);
24
25 //新建prt
26 tag_t prtTag = NULL_TAG;
27 UF_PART_new("D:\\123.prt", 1, &prtTag);
28
29 //轉換
30 char msgL[256];
31 sprintf_s(msgL, "%d", L);
32
33 char msgW[256];
34 sprintf_s(msgW, "%d", W);
35
36 char msgH[256];
37 sprintf_s(msgH, "%d", H);
38
39 //創建塊
40 UF_FEATURE_SIGN Sign = UF_NULLSIGN;//設置布爾
41 double Corner_pt[3] = { 0.0, 0.0, 0.0 };//設置原點
42 char *Edge_Len[3] = { msgL, msgW, msgH };//設置長寬高
43 tag_t BlkTag = NULL_TAG;
44 UF_MODL_create_block1(Sign, Corner_pt, Edge_Len, &BlkTag);
45
46 //保存prt
47 UF_PART_save();
48
49
50 UF_terminate();
51
52 Caesar盧尚宇
53 2020年2月29日
用cmd控制檯去執行exe
5.主程序調用封裝的exe,傳參使用。
使用dll或者exe,NX項目還是VC應用程序項目都可以。
我就選擇了NX的dll項目。
直接添加調用代碼
1
2 char msg[256];
3 sprintf_s(msg, "D:\\MyCode\\testBlock\\x64\\Debug\\testBlock.exe %d %d %d", 45, 69, 200);
4 system(msg);
5
6 Caesar盧尚宇
7 2020年2月29日
Caesar盧尚宇
2020年2月29日