gpt4 book ai didi

c# - 从 CLSID 动态加载 ActiveX 控件

转载 作者:行者123 更新时间:2023-11-30 21:16:28 25 4
gpt4 key购买 nike

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

  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) 时它不会抛出任何异常所以它必须创建一个有效的实例但是如何一组是属性,然后将此控件“绘制”到 Windows 窗体吗?

谢谢。

最佳答案

这在 .NET 中很困难。一个 ActiveX 控件需要一个包装器来给它一个好客的家。该包装器由 AxHost 类实现。不幸的是你不能在代码中直接使用这个类,它的构造函数是 protected 。它旨在供 AxImp.exe 工具使用。该工具自动生成一个派生自 AxHost 的 .NET 类。然后生成的类很容易用作控件。问题是,该工具需要在您设计表单时预先运行。这从来都不是真正的问题,除了这里。

您可以做的最好的事情是使用 AxImp 为您可能在前面的脚本中找到的任何 ActiveX 控件创建包装器。它很可能是一个有限的子集。然后让脚本解释器根据 clsid 选择正确的包装器。像您预期的那样动态地执行它需要您创建自己的包装器。然而,AxHost 不是一个小类,ActiveX 托管非常不愉快,需要处理许多细节。

关于c# - 从 CLSID 动态加载 ActiveX 控件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5179797/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com