这是我第一次尝试 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/