首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >从CLSID动态加载ActiveX控件

从CLSID动态加载ActiveX控件
EN

Stack Overflow用户
提问于 2011-03-03 10:56:58
回答 1查看 2K关注 0票数 2

我正在解析一些第三方的软件“脚本”,它根据C#程序的内容生成一个GUI表单,我想在一个程序中阅读这个脚本并产生类似的输出,下面是一个示例脚本:

代码语言:javascript
复制
  BEGIN SECTION Intro
    BACKPICTURE=xxxx.gif
    PICTUREPOSN=Center
    BEGIN CONTROL CLI
    IS RADIO=NO
      CLSID={49EBC3A3-727D-11CF-9BB9-080000001311}
      POSITION=(24,16,250,45)
      QUESTION=@0:232
      BEGIN PROPERTY Title
        DISPID=2
        SETTING=CLI :
        TYPE=BSTR
      END PROPERTY
      BEGIN PROPERTY Arrangement
        DISPID=3
        SETTING=1
        TYPE=I4
      END PROPERTY
      BEGIN PROPERTY EditBoxLength
        DISPID=4
        SETTING=3
        TYPE=I4
      END PROPERTY

我感兴趣的属性是BEGIN CONTROLBEGIN PROPERTY,因为这些属性指示ActiveX控件及其属性的开始。

我的问题:我将如何通过它的CLSID加载这个ActiveX控件并设置它的属性?Type.GetTypeFromCLSID似乎是我想要的,当我使用Activator.CreateInstance(Type)时它不会抛出任何异常,所以它必须创建一个有效的实例,但是一个集合是属性,然后将该控件“绘制”到一个Activator.CreateInstance(Type)窗体中?

谢谢。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2011-03-03 11:29:32

这在.NET中是很困难的,ActiveX控件需要一个包装器才能给它一个好客的家。该包装器由AxHost类实现。不幸的是,不能在代码中直接使用这个类,它的构造函数是受保护的。它被设计为供AxImp.exe工具使用。该工具自动生成一个从AxHost派生的AxHost类。这样,生成的类就可以很容易地作为控件使用。问题是,在设计表单时,需要先运行该工具。这不是个真正的问题,除了这里。

最好的方法是使用AxImp为您可能在脚本中预先找到的任何ActiveX控件创建包装器。它可能是一个有限的子集。然后让脚本解释器根据clsid选择正确的包装器。按照您的意愿动态地执行它,需要您创建自己的包装器。然而,AxHost并不是一个小类,ActiveX托管非常令人不快,还有很多细节需要处理。

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

https://stackoverflow.com/questions/5179797

复制
相关文章

相似问题

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