• 开发Pro/Toolkit应用程序


    下载:开发Pro/Toolkit应用程序.docx

             开发Pro/Toolkit应用程序.pdf

    一、Pro/Toolkit应用程序的运行机制

      Pro/Toolkit程序集成到ProE程序中的标准方式是使用动态链接库。当你编译你的Pro/Toolkit C代码并且和Pro/Toolkit库建立链接,就会产生二进制的库文件(dll),当ProE启动时,它将被集成到ProE中。这种方式被称为Dll模式。

      Pro/Toolkit还支持另外一种集成方式:多进程模式或称衍生模式。这种模式下,Pro/Toolkit程序被编译链接成一个独立的可执行文件。它衍生于ProE程序,作为ProE的子进程而运行。在Dll模式下,Pro/Toolkit程序与ProE程序之间的信息交换是通过直接的函数调用实现。而在多进程模式下,这两个进程之间的函数调用需要传递必要的信息,以识别调用的是哪个函数以及函数的参数值。这样就模拟出了和Dll模式中相同的效果。

      多进程模式相对于Dll模式而言,其通信成本更大(备注:通信时间以及信息量),特别是当Pro/Toolkit程序频繁地调用Pro/Toolkit库函数时尤其明显,因为进程之间函数调用的实现更为复杂。然而,它也有以下优点:可以让你使用源代码调试器调试程序而勿需将整个ProE可执行文件加载到调试器中。

      在不改变Pro/Toolkit C源码的情况下,你可将程序编译链接成Dll模式或多进程模式。你也可以在同一个ProE进程中运行多个Pro/Toolkit程序,而且这些程序可以混合使用不同的模式。

      如果你在编写Pro/Toolkit程序时,为了方便调试采用了多进程模式,那么在给最终用户安装使用时,应当切换至Dll模式,因为在Dll模式下,程序会运行的更好。在切换至Dll模式后,请小心彻底的测试你的Toolkit程式再发布。因为在不同的模式下,ProE和Pro/Toolkit中任何导致内存损坏的编程错误都很可能有不同的表现。所以在切换至Dll模式后,可能会出现新的Bug。

      虽然多进程模式可以触发ProE与Pro/Toolkit程式并行运行,但本质上它们并非真正的并行运行。另外一种集成Pro/Toolkit程序的模式可以实现这个功能,我们称之为异步模式。相对而言,我们把Dll模式及多进程模式称之为同步模式。异步模式的Pro/Toolkit程序与同步模式程序在程序架构上是完全不同的,所以在编写代码之前,必须从这两者中选择一种。一般情况下,应默认选择同步模式,除非有不可抗拒的原因,因为异步模式比同步模式更复杂。

     

    二、利用VC 开发Pro/Toolkit应用程序

    具体环境配置及步骤请参阅相关文章。

     

    三、注册Pro/Toolkit程序

      注册文件用于向ProE提供组成Pro/Toolkit程序的基本信息。ProE会通过注册文件提供的信息来加载Pro/Toolkit程序。

     ProE将会从下述位置顺序搜索注册文件:

    (1)ProE配置文件(config文件)中以PROTKDAT、PRODEVDAT、TOOLKIT_REGISTRY_FILE指定的绝对路径。

    (2)当前目录下的protk.dat或prodev.dat文件。

    (3) <Pro/ENGINEER>/<MACHINE>/text目录下的protk.dat或prodev.dat文件。

    (4)<Pro/ENGINEER>/text目录下的protk.dat或prodev.dat文件。

    其中:

    <Pro/ENGINEER>指ProE的安装路径

    <MACHINE>指以计算机平台名称指定的子目录,如i486_nt子目录。

      如果在路径(2)(3)(4)下存在多个名字相同的注册文件protk.dat或prodev.dat,则ProE会以第一个同名的注册文件为准,而忽略掉后续的同名注册文件。例如:如果在当前目录和<Pro/ENGINEER>/text目录下均存在protk.dat注册文件,则ProE会忽略掉<Pro/ENGINEER>/text目录下的protk.dat文件,当然如果此时你将后者的名称改为prodev.dat,则由于名字不同,两个注册文件都会读取。

    注意:(1)中指定绝对路径的注册文件名和(2)(3)(4)中冲突时则没有影响。

    例如在config.pro文件中指定

    PROTKDAT D:\WangYao\iStudy\ProE\ProToolKit\TestTK\TEST_2\protk.dat

    PROTKDAT D:\WangYao\iStudy\ProE\ProToolKit\TestTK\TEST_3\protk.dat

    并且在当前目录下有protk.dat,则这3个注册文件都会读取。

       我们在开发Pro/Toolkit程序时,一般将注册文件protk.dat置于特定的目录下,这样只有在该目录下启动ProE才会加载Pro/Toolkit。而在给用户最终安装使用Pro/Toolkit时,一般会将protk.dat注册文件置于<Pro/ENGINEER>/text目录下,这样能保证无论从什么目录启动ProE,都可以读取该注册文件从而加载Pro/Toolkit程序。

      注册文件是一个简单的文本文件,其中每一行均包含某个预定义的关键字,后接具体的值。

      在Dll模式下,一个注册文件的标准形式如下:

    name       ToolkitTest

    startup    dll

    exec_file  D:\Toolkit\Dll\TestTK.dll

    text_dir   D:\Toolkit\Dll

    revision   Wildfire

    allow_stop TRUE

    end

    具体含义如下:

    name     --- 为Pro/Toolkt程序指定的名字ID,该名字必须具有唯一性。

    startup   --- 指定ProE与Pro/Toolkit程序的通信方式,本例指定为Dll模式。

    exec_file --- 指定要加载的Pro/Toolkit程序的完整路径

    text_dir   --- 指定包含Pro/Toolkit程序菜单与消息文件的目录。

    revision  --- 指定创建应用程序所使用的Pro/Toolkit版本。为ProE3.0、4.0开发的程序请指定值为Wildfire。

    end        --- 结束标志

    如果希望在多进程模式下运行,那么就必须对注册文件做以下修改。

    (1)修改startup语句为startup spawn

    (2)修改exec_file的值以指向Pro/Toolkit的可执行文件。

     

    四、启动和停止Pro/Toolkit应用程序 

      Pro/Toolkit支持在一个ProE工作任务中停止和重启一个同步应用程序的功能,这在开发Pro/Toolkit程序时很有用,因为它可以让你不用重启ProE,就可以修改程式源码,编译之后重新加载测试。

           在ProE中,使用辅助应用程序对话框就可以停止和重启Pro/Toolkit应用程序。如下图所示

     

    但有一个前提,你必须在注册文件中加入以下语句:

      allow_stop TRUE

    若没有加该语句或语句为allow_stop FALSE,则不能手动重启与停止,并且在辅助应用程序对话框中将不会显示该程式,除非点Info按钮才会列出。

      在ProE中通过点击Tools菜单下的Auxiliary Applications子菜单项会弹出辅助应用程序对话框。在对话框中,将显示以注册文件中name语句指定的Pro/Toolkit 程序名列表,以及程序的当前状态。

    辅助应用程序对话框中:

        Start用于启动Pro/Toolkit应用程序。

        Stop用于终止Pro/Toolkit应用程序。

        Register用于加载Pro/Toolkit应用程序。

        Delete用于从卸载Pro/Toolkit应用程序。

        Info用于列出所有当前Pro/Toolkit应用程序的基本信息。

        如果你想在启动ProE不想立即运行所加载的Pro/Toolkit应用程序,应在注册文件中加入以下语句:

        delay_start TRUE

        你可以通过辅助应用程序对话框中的Start按钮启动运行。

     

    五、解锁Pro/Toolkit应用程序

      在你向最终用户发布你的Pro/Toolkit应用程序之前,必须将其解锁。这将确保用户在没有安装Pro/Toolkit的情况下,仍然可以运行你的Pro/Toolkit应用程序。

           要解锁Pro/Toolkit应用程序,请在CMD窗口中输入以下命令:

        <Pro/ENGINEER Loadpoint>/bin/protk_unlock.bat  Pro/Toolkit程序的完整路径

        Tips: 将protk_unlock.bat文件和Pro/Toolkit程序拖动到cmd窗口中即可,不用手动输入那么麻烦。

    解锁成功显示的信息如下:

      解锁Pro/Toolkit应用程序需要用到Pro/Toolkit License。每解锁成功一个Pro/Toolkit应用程序会占用用到的Pro/Toolkit License 15分钟,即该Pro/Toolkit License在这15分钟内都无法使用了。所以,如果你只有一个Pro/Toolkit License,那么在解锁成功一个Pro/Toolkit应用程序后的15分钟内,你将无法再解锁其他Pro/Toolkit应用程序了,因为该Pro/Toolkit License会被占用15分钟,之后就又可以使用了。

     

    六、Pro/Toolkit应用程序的结构

      在每个Pro/Toolkit应用程序的源文件中,都必须包含头文件:ProToolkit.h,而且必须为第一个包含的头文件。因为它定义了宽字符wchar_t,而该类型被许多其他的Pro/Toolkit头文件使用。Pro/Toolkit.h同时还包含下述这些标准头文件:

    stdio.h

    string.h

    stddef.h

    stdlib.h。

      同步模式的Pro/Toolkit应用程序必须包含user_initialize()和user_terminate()函数,它们由Pro/Toolkit应用程序开发者编写,在启动和结束Pro/Toolkit应用程序时由ProE分别调用。

    注意:(1) Pro/Toolkit应用程序代码中必须至少包含一个Pro/Toolkit函数的调用,否则ProE加载该Pro/Toolkit应用程序会出错。

              (2) 如果是用C++编写Pro/Toolkit程序,请在user_initialize()和user_terminate()函数之前加上extern “C”。

      user_initialize()函数必须返回0,以表示Pro/Toolkit应用程序已经成功地初始化,其他的返回值均会被认为是错误的,且系统会通知ProE用户:Pro/Toolkit应用程序初始化失败。

    每个新Pro/Toolkit同步模式应用程序的开始处都必须要有如下代码:

    #include "ProToolkit.h"

    int user_initialize()

    {

        return (0);

    }

    void user_terminate()

    {

    }

     

    七、在Pro/Toolkit应用程序中使用多线程 

      Pro/Toolkit应用程序也支持多线程,但是,你必须只能在一个线程中调用Pro/Toolkit函数,否则会导致程序出错。

           在同步模式下的Dll模式中,若要使用多线程,请在user_initialize()函数中调用ProEngineerMultithreadModeEnable()函数,该函数会通知ProE以使其运行在支持多线程的模式下。但运行在该模式下的程序其性能会降低,所以,当确实要在Pro/Toolkit程序中使用多线程时,才调用此函数。

     

    八、Pro/Toolkit与ProE的版本兼容性

      在很多情况下,你没法保证你的Pro/Toolkit程序的使用者使用的ProE和你编译和链接Pro/Toolkit程式时使用的ProE是一个版本的。ProE与Pro/Toolkit混合使用时,其兼容性的规则如下:(Release版本即正式版本指ProE升级产品的版本号,如Wildfire3.0,Wildfire4.0。Bulid版本即创建版本,指同一正式版本下不同日期的升级版,如F000,M230。)

    1、ProE Release版本比Pro/Toolkit Release版本旧。

          这种情况下不支持。

    2、ProE Release版本比Pro/Toolkit Release版本新。

      这在多数情况下可以正常工作,但不是全部。Pro/Toolkit与ProE的通信方式在所有Release版本之间都完全兼容。然而,个别情况下对ProE内核的修改,可能需要改变Pro/Toolkit应用程序的源码,以使程序正常工作。是否需要修改取决于你的Pro/Toolkit程序中使用了什么功能以及该功能是否在ProE和Pro/Toolkit中有所改变。PTC会尽量使可能产生的影响降至最小。Pro/Toolkit的正式版本信息已详细说明了对于哪个版本所有可能需要的转变工作。

    3、Release版本相同,ProE Build版本比Pro/Toolkit Build版本旧。

      在Pro/Toolkit Release 20和Pro/Toolkit Release 2000i中,这不支持。从Release 2000i2开始,就基本可以了,除非你的Pro/Toolkit程序调用了新Build版本中新增或修改了的Pro/Toolkit函数。从Release 2000i2开始,PTC公司会避免修改之前的Pro/Toolkit函数的定义并尽量使新增的函数数量最小。

    4、Release版本相同,ProE Build版本比Pro/Toolkit Build版本新。

    总是支持的。

     

    九、Pro/Toolkit与ProE的跨平台性

      在有些情况下,你没法保证运行你Pro/Toolkit应用程序的计算机和你创建Pro/Toolkit程序使用的计算机,拥有相同的操作系统和系统架构。一个可能的情况是:你的Pro/Toolkit程序中使用了第三方的库,而该库只能在32位计算机系统上使用,但你的Pro/Toolkit程序却必须运行在拥有相同操作系统的64位计算机上。Pro/Toolkit对运行在这种情况下的异步以及多进程模式程序,提供有限的兼容性。对于Dll模式下的Pro/Toolkit应用程序而言,必须总是要确保创建该应用程序所使用的计算机和运行该程序所使用的计算机,拥有相同的操作系统和系统架构。

    其兼容性的规则如下:

    1、创建Pro/Toolkit应用程序的计算机和最终运行Pro/Toolkit应用程序的计算机,拥有相同的操作系统和系统架构。

         这种情况总是支持的。

    2、创建Pro/Toolkit应用程序的计算机比最终运行Pro/Toolkit应用程序的计算机的数据位数小。例如,在Windows 32位系统上创建的Pro/Toolkit程序需要运行在Windows 64位的ProE上。

         这种情况下仅仅支持异步模式与多进程模式。

    3、创建Pro/Toolkit应用程序的计算机比最终运行Pro/Toolkit应用程序的计算机的数据位数大。例如,在Windows 64位系统上创建的Pro/Toolkit程序需要运行在Windows 32系统的ProE上。

         不支持这种情况。

  • 相关阅读:
    Flex弹性盒模型
    响应式布局rem的使用
    京东首页如何实现pc端和移动端加载不同的html的?
    canvas绘制表盘时钟
    javascript实现ul中列表项随机排列
    使用 HTML5 视频事件
    Javascript获取当前鼠标在元素内的坐标定位
    移动 web 开发问题和优化小结
    关于fisher判别的一点理解
    机器学习第三课(EM算法和高斯混合模型)
  • 原文地址:https://www.cnblogs.com/Hisin/p/2432057.html
Copyright © 2020-2023  润新知