【问题标题】:Handling ActiveX Control Exceptions(C#) in Javascript在 Javascript 中处理 ActiveX 控件异常(C#)
【发布时间】:2013-06-19 18:32:35
【问题描述】:

我用 C# 编写了一个 ActiveX 控件,使用 COM 互操作来公开方法/属性。

[ComVisible(true)]
class COMClass:ICOMClass
{ 
     public string methodA()
     {
          string str = "abc";
          if(str != "abcd")
              throw new Exception("invalid string");
         return str;
     }
}
[ComVisible(true)]
interface ICOMClass
{
    string methodA();
}

有没有办法在javascript中处理C#抛出的异常?我找遍了都找不到?

例如。

var x = new ActiveXObject("COMClass");
try{
   x.methodA
}
catch(e) { 
   alert(e);
}

【问题讨论】:

    标签: c# javascript activex


    【解决方案1】:

    致电alert(e.message) 对我有用。

    确保您的 ActiveX 类正在实现 IObjectSafety:

    using System;
    using System.Runtime.InteropServices;
    
    [ComImport()]
    [Guid("CB5BDC81-93C1-11CF-8F20-00805F2CD064")]
    [InterfaceType(ComInterfaceType.InterfaceIsIUnknown)]
    internal interface IObjectSafety
    {
        [PreserveSig()]
        int GetInterfaceSafetyOptions(ref Guid riid, out int pdwSupportedOptions, out int pdwEnabledOptions);
    
        [PreserveSig()]
        int SetInterfaceSafetyOptions(ref Guid riid, int dwOptionSetMask, int dwEnabledOptions);
    }
    

    【讨论】:

    • 感谢您的回答。我尝试了您所做的,但是在调试时,即使我抛出错误,也从未捕获到异常。你知道为什么吗?
    • 如果不抛出异常,脚本是否有效?即:如果您取出异常,您是否成功返回“abc”?
    • IT 实际上是一个 get/set 属性,我使 COM 可见
      public String DefaultFont { get { return m_DefaultFont; } set { if (value.length != 5) throw new Exception("error"); m _DefaultFont = 值; }
      脚本确实有效。它只是通过,就像没有发生错误一样
    • 我似乎记得通过 .NET 属性执行此操作的问题。能不能用实际的方法试一下,看看有没有异常?
    • 你是对的。它适用于方法,但不适用于属性。有办法解决吗?除了将我所有的属性转换为我还不想做的 Get/Set 方法。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-04-04
    • 1970-01-01
    • 1970-01-01
    • 2012-04-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多