我有一个通过 ObjectForScripting 与 WebBrowserControl 交互的 WinForm。我的 WinForm 的基类不是 ComVisible,我不能或不会更改它。因为有一个 NonComVisibleBaseClass 我创建了一个接口并将其设置为 ComVisible(true) 并设置 FormAttribute [ClassInterface(ClassInterfaceType.None)]。接口中的方法可以被 JavaScript 调用。它完美无缺:
//Make the class visible for COM so we can set the ObjectForScripting
//Specify ClassInterfaceType.None to use the ComVisible Interface
[ComVisible(true)]
[ClassInterface(ClassInterfaceType.None)]
public partial class GeekBrowser : GeekBasePage, IMapControlInteractable
...
public class GeekBasePage : System.Windows.Forms.Form
...
[ComVisible(true)]
public interface IMapControlInteractable
但现在我的问题。该接口包含多个功能。我想为单独的任务分组分离接口。所以我想要一个包含日志记录功能的接口和一个用于数据访问功能的接口等等。
所以它会是这样的:
[ComVisible(true)]
[ClassInterface(ClassInterfaceType.None)]
public partial class GeekBrowser : GeekBasePage, IDataAccess, ILogging
...
public class GeekBasePage : System.Windows.Forms.Form
...
[ComVisible(true)]
public interface IDataAccess
...
[ComVisible(true)]
public interface ILogging
但是当我这样做时,无法从 Javascript 访问第二个接口 (ILogging) 的功能。如果我切换接口的顺序,则无法访问 IDataAccess 函数。
所以似乎只有第一个接口中的方法可以在 Javascript 中访问。
我该怎么做才能使每个接口的每个功能都可以访问?再一次,使 BaseClass ComVisible 和删除 ClassInterface 属性将起作用,但不是一个选项。
提前致谢!!