javascript - ActiveX "Class doesn' t 支持自动化”

标签 javascript .net activex

这是我第一次尝试 ActiveX 控件(有了这次经验,这将是我最后一次尝试)。高级别,当我尝试使用一种方法时,我收到一个控制台错误,其中显示“类不支持自动化”。

我创建了一个自定义 ActiveX 控件,通过 MSI 安装它,并尝试在 MVC 应用程序中使用它。接口(interface)定义为:

[ComVisible(true)]
[InterfaceType(ComInterfaceType.InterfaceIsDual)]
[Guid("7EC603C3-3FB9-4E8B-A5B8-4D5804511E15")]
public interface IPrinter

具体类:

[ComVisible(true)]
[ClassInterface(ClassInterfaceType.None)]
[Guid("1F668100-532A-4077-BEDE-1610AF2CC6DF")]
[ProgId("AxControls.Printer")]
[ComDefaultInterface(typeof(IPrinter))]
public class Printer: IPrinter, IObjectSafety

IObjectSafety接口(interface)和实现:

[ComImport]
[Guid("34ABF5FA-1991-4D53-81BF-7DC7E3EFD8F6")]
[InterfaceType(ComInterfaceType.InterfaceIsIUnknown)]
public interface IObjectSafety
{
    [PreserveSig]
    int GetInterfaceSafetyOptions(ref Guid riid, out int pdwSupportedOptions, out int pdwEnabledOptions);

    [PreserveSig]
    int SetInterfaceSafetyOptions(ref Guid riid, int dwOptionSetMask, int dwEnabledOptions);
}

    public int GetInterfaceSafetyOptions(ref Guid riid, out int pdwSupportedOptions, out int pdwEnabledOptions)
    {
        const ObjectSafetyOptions options = ObjectSafetyOptions.INTERFACESAFE_FOR_UNTRUSTED_CALLER | ObjectSafetyOptions.INTERFACESAFE_FOR_UNTRUSTED_DATA;
        pdwSupportedOptions = (int)options;
        pdwEnabledOptions = (int)options;

        return 0;
    }
    public int SetInterfaceSafetyOptions(ref Guid riid, int dwOptionSetMask, int dwEnabledOptions)
    {
        return 0;
    }

    [Flags]
    public enum ObjectSafetyOptions
    {
        INTERFACESAFE_FOR_UNTRUSTED_CALLER = 0x00000001,
        INTERFACESAFE_FOR_UNTRUSTED_DATA = 0x00000002,
        INTERFACE_USES_DISPEX = 0x00000004,
        INTERFACE_USES_SECURITY_MANAGER = 0x00000008
    };

还有我的 JavaScript:

var ax = new ActiveXObject("AxControls.Printer");
ax.Print(JSON.parse(data.obj), "NameOfPrinter");

错误发生在第二个JS行。我使用的是 IE 11。单步执行代码,控件似乎已正确加载。如果我将参数更改为无效,我会收到不同的消息,这使我相信它们是正确的并且不是问题。

非常感谢任何帮助。

最佳答案

我也在无法访问的远程计算机上遇到此错误。我发现一些链接提到您需要重新注册一些 DLL,但不确定它们是否解决了问题。如果您尝试这样做可以解决您的问题吗? oracle docs, see issue 11821241

在命令提示符中运行:

regsvr32 msscript.ocx

regsvr32 dispex.dll

regsvr32 vbscript.dll

regsvr32 scrrun.dll

regsvr32 urlmon.dll

关于javascript - ActiveX "Class doesn' t 支持自动化”,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24367113/

相关文章:

c++ - 从 ActiveX 控件中的方法返回值

c# - 64 位 Windows 中的 ActiveX 控件

activex - 可以在Activex中使用WebView2吗?

javascript - 如何刷新 tempo js 以显示新数据?

无法从数据库检索数据的 JavaScript 警报消息

c# - 如何在卸载时从应用程序数据目录中删除文件?

c# - WPF 线程延迟

javascript - Rangy.js - 具有多个类的 createClassApplier

javascript - 如何将对象的子属性与 Polymer 中的纸张输入绑定(bind)

c# - MEF:我应该把 CompositionContainer 放在哪里?