一般常用的工具开发都是结合界面交互的,这种叫内部开发模式,编译生成的是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 FilesSiemensNX 11.0NXBIN里面。(NX11版本以下是放到UGII里面的)
在双击执行exe,就不会报错了。
2.打开电脑环境变量,在PATH环境变量里加上D:Program FilesSiemensNX 11.0NXBIN
在双击执行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日