zoukankan      html  css  js  c++  java
  • 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 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日

  • 相关阅读:
    Centos 7 快速安装 Docker
    MySQL乱码
    阿里云中linux 下svn服务器安装
    java中易错点(二)
    java中易错点(一)
    mysql5.7.24 解压版安装步骤以及遇到的问题
    linux交换分区调整
    linux之切换用户su(switch user)
    linux简单常用命令
    Yum简单使用小结
  • 原文地址:https://www.cnblogs.com/nxopen2018/p/12386103.html
Copyright © 2011-2022 走看看