首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >ActiveX“类不支持自动化”

ActiveX“类不支持自动化”
EN

Stack Overflow用户
提问于 2014-06-23 13:23:50
回答 2查看 2.1K关注 0票数 1

这是我第一次尝试ActiveX控件(有了这次经验,这将是我的最后一次尝试)。高级别,当我尝试使用一种方法时,我会得到一个控制台错误,上面写着"Class不支持自动化“。

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

代码语言:javascript
代码运行次数:0
运行
复制
[ComVisible(true)]
[InterfaceType(ComInterfaceType.InterfaceIsDual)]
[Guid("7EC603C3-3FB9-4E8B-A5B8-4D5804511E15")]
public interface IPrinter

具体课程:

代码语言:javascript
代码运行次数:0
运行
复制
[ComVisible(true)]
[ClassInterface(ClassInterfaceType.None)]
[Guid("1F668100-532A-4077-BEDE-1610AF2CC6DF")]
[ProgId("AxControls.Printer")]
[ComDefaultInterface(typeof(IPrinter))]
public class Printer: IPrinter, IObjectSafety

IObjectSafety接口和实现:

代码语言:javascript
代码运行次数:0
运行
复制
[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:

代码语言:javascript
代码运行次数:0
运行
复制
var ax = new ActiveXObject("AxControls.Printer");
ax.Print(JSON.parse(data.obj), "NameOfPrinter");

错误发生在第二行JS上。我正在使用IE 11。通过代码,它看起来控制加载正确。如果我将论点修改为无效,我会得到不同的信息,使我相信它们是正确的,而不是问题所在。

任何帮助都是非常感谢的。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2014-08-20 15:40:19

通过使用以下命令注册,我成功地使用了ActiveX控件:

代码语言:javascript
代码运行次数:0
运行
复制
regasm /codebase [path to DLL]

参考资料:http://msdn.microsoft.com/en-us/library/tzat5yw6(v=vs.110).aspx

票数 0
EN

Stack Overflow用户

发布于 2014-07-14 09:07:03

我还在远程机器上得到这个错误,我无法访问这个错误。我发现一些链接提到您需要重新注册几个DLL,但不确定它们是否解决了问题。如果您尝试这样做,它会解决您的问题吗?oracle,见第11821241期

在命令提示符中运行:

代码语言:javascript
代码运行次数:0
运行
复制
regsvr32 msscript.ocx

regsvr32 dispex.dll

regsvr32 vbscript.dll

regsvr32 scrrun.dll

regsvr32 urlmon.dll
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/24367113

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档