首页 解决方案 SE二次开发- -处理应用程序正忙的错误

SE二次开发- -处理应用程序正忙的错误

作者:谭弘利 审校:凌俊 适用版本:SolidEdge所有版本 SolidEdge是Siemens PLM Software公司旗下的三维CAD软件,采用Siemens PLM Software公司自己拥有专利的Parasolid作为软件核心,将普及型CAD系统与世界上最具领先地位的实体造型引擎结合在一起,是基于Windows平台、功能强大且易用的三维CAD软件。

SE二次开发- -处理应用程序正忙的错误

作者:谭弘利   审校:凌俊

适用版本:SolidEdge所有版本

SE二次开发- -处理应用程序正忙的错误

SolidEdge是Siemens PLM Software公司旗下的三维CAD软件,采用Siemens PLM Software公司自己拥有专利的Parasolid作为软件核心,将普及型CAD系统与世界上最具领先地位的实体造型引擎结合在一起,是基于Windows平台、功能强大且易用的三维CAD软件。

SolidEdge二次开发有COM和Addin两种方式,其中COM(组件对象模型)具有不依赖平台和编程语言等优点,是最常用的一种Solid二次开发方式。当通过外部方式进行访问SolidEdge应用程序时,有可能会报以下异常:

SE二次开发- -处理应用程序正忙的错误

应用程序正在运行时或未响应(RPC_E_CALL_REJECTED 0x80010001)

SE二次开发- -处理应用程序正忙的错误

拒绝被调用(RPC_E_SERVERCALL_RETRYLATER 0x8001010A)

发生这些错误是因为二次开发程序和SolidEdge之间的线程争用问题,可以通过实现IOleMessageFilter接口处理这些异常。

说      明

SE二次开发- -处理应用程序正忙的错误

首先创建OleMessageFilter,实现IOleMessageFilter接口,代码如下:

namespace UGITCApp

{

    class OleMessageFilter : IOleMessageFilter

    {

        public static void Register()

        {

            IOleMessageFilter newFilter = new OleMessageFilter();

            IOleMessageFilter oldFilter = null;

 

            if (Thread.CurrentThread.GetApartmentState() == ApartmentState.STA)

            {

                CoRegisterMessageFilter(newFilter, out oldFilter);

            }

            else

            {

                throw new COMException(“Unable to register message filter because the current thread apartment state is not STA.”);

            }

        }

        public static void Revoke()

        {

            IOleMessageFilter oldFilter = null;

            CoRegisterMessageFilter(null, out oldFilter);

        }

        int IOleMessageFilter.HandleInComingCall(

            int dwCallType,

            System.IntPtr hTaskCaller,

            int dwTickCount,

            System.IntPtr lpInterfaceInfo)

        {

            return (int)SERVERCALL.SERVERCALL_ISHANDLED;

        }

        int IOleMessageFilter.RetryRejectedCall(

            System.IntPtr hTaskCallee,

            int dwTickCount,

            int dwRejectType)

        {

            if (dwRejectType == (int)SERVERCALL.SERVERCALL_RETRYLATER)

            {

                return 99;

            }

 

            return -1;

        }

        int IOleMessageFilter.MessagePending(

            System.IntPtr hTaskCallee,

            int dwTickCount,

            int dwPendingType)

        {

            return (int)PENDINGMSG.PENDINGMSG_WAITDEFPROCESS;

        }

        [DllImport(“Ole32.dll”)]

        private static extern int CoRegisterMessageFilter(

            IOleMessageFilter newFilter,

            out IOleMessageFilter oldFilter);

    }

 

    [ComImport(), Guid(“00000016-0000-0000-C000-000000000046”),

    InterfaceTypeAttribute(ComInterfaceType.InterfaceIsIUnknown)]

    interface IOleMessageFilter

    {

        [PreserveSig]

        int HandleInComingCall(

            int dwCallType,

            IntPtr hTaskCaller,

            int dwTickCount,

            IntPtr lpInterfaceInfo);

        [PreserveSig]

        int RetryRejectedCall(

            IntPtr hTaskCallee,

            int dwTickCount,

            int dwRejectType);

        [PreserveSig]

        int MessagePending(

            IntPtr hTaskCallee,

            int dwTickCount,

            int dwPendingType);

    }

}

SE二次开发- -处理应用程序正忙的错误

使用方法如下:

static void Main(string[] args)

        {

            OleMessageFilter.Register();

            // Make COM calls.

            OleMessageFilter.Revoke();

        }

免责声明:文章内容不代表本站立场,本站不对其内容的真实性、完整性、准确性给予任何担保、暗示和承诺,仅供读者参考,文章版权归原作者所有。如本文内容影响到您的合法权益(内容、图片等),请及时联系本站,我们会及时删除处理。

作者: suifengmianlai

为您推荐

生产制造 | 数控仿真保证“安全” 之 NCSIMUL四轴机床搭建

NCSIMUL 通过上一期对三轴机床搭建的讲解和演示,想必大家已经能够搭建自己专属的三轴机床。

质量管理 | 海克斯康 Q-DAS®与SAP QM的交互应用方案

SAP(System Applications and Product) 软件在企业的部署着眼于中央业务流程的优化。

新能源汽车供应链强力转型,数字化供应链系统订单管理数字化助力企业降本增效

当前,全球新能源汽车产业发展驶入快车道,新产品新技术加快研发运用,技术创新带动产业持续升级。

进度猫甘特图:项目管理中的任务分解工具

项目管理中是将大的项目目标划分为各个小阶段任务,WBS就是化繁为简,将负责非项目拆分为简单的任务,它可让事情依照一定规则或关系,通过一层一层来分解,这样要做的任务可以变为小目标。

查看流程审批历史记录解决方案

作者:黄鹏 审校:李达 适用版本:TC11 用户可以在TC中看到整个流程的历史记录,包括驳回,审批,编制的操作,这样可以方便我们查看哪些人参与了这个流程。

发表回复

您的电子邮箱地址不会被公开。 必填项已用*标注

返回顶部