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日

 

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