一般常用的工具开发都是结合界面交互的,这种叫内部开发模式,编译生成的是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日