处理Javascript中的ActiveX控件异常(C#)

3

我使用 COM Interop 编写了一个 C# ActiveX 控件,以便公开方法 / 属性。

[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);
}
1个回答

2

对我而言,调用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);
}

谢谢您的回答。我尝试了您的方法,但是在调试时,即使我抛出了一个错误,异常也从未被捕获。您有任何想法为什么会这样吗? - Quang Phan
如果您不抛出异常,脚本是否能正常工作?即:如果您删除异常,是否成功返回“abc”? - Nick Gotch
我记得通过.NET属性进行此操作存在问题。你能否尝试使用实际的方法来执行并查看是否会出现异常? - Nick Gotch
你是正确的。它可以使用方法,但不能使用属性。有没有其他解决方法?除了将所有属性转换为Get/Set方法,而我还不想这样做。 - Quang Phan
那也可能是我的经历;我不记得细节了。如果你找到了一种让属性抛出异常的方法,请务必发布你的答案。 - Nick Gotch
显示剩余3条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接