NX二次開發-外部開發模式exe(不打開NX進行後臺操作)以及封裝exe傳參調用

一般常用的工具開發都是結合界面交互的,這種叫內部開發模式,編譯生成的是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日

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章