概要

逐步本文介绍如何手动添加到 ActiveX 控件动态创建或 VisualC # 2005 VisualC # .NET 中运行时许可证。 在 Visual Basic 6, 通过 Licenses.Add() 方法手动添加到许可证集合许可证。 更多有关在 Visual Basic 6, License.Add() 作用信息请参阅与本文 " 参考 " 部分。

VisualC # 2005, 或 VisualC # .NET 中许可证集合不再存在。 必须在控件中嵌入许可证信息。

本文假定控件需要运行时许可证处于 MyProject.OCX 并命名 MyLicensedControl。 MyProject.OCX 位于 C:\Windows\System 32。

回到顶端

创建一个新 VisualC # .NET 或 VisualC # 2005 项目

1. 指向 所有程序 , 指向 MicrosoftVisualStudio.NET , 依次 MicrosoftVisualStudio.NET 开始 。

注意 在 Visual Studio 2005、 Microsoft Visual Studio .NET 改为 Microsoft Visual Studio 2005
2. 在 文件 菜单, 指向 新建 , 然后单击 项目 。
3. 在 新建项目 对话框中, 单击 项目类型 下面 VisualC # 项目 , 单击 模板 , 下 Windows 应用程序 然后然后单击 确定 。

注意 除了 Visual Studio 2005、 VisualC # 项目 更改为 VisualC #

回到顶端

创建 ActiveX Interop 程序集

1. 指向 所有程序 , 指向 MicrosoftVisualStudio.NET , 指向 VisualStudio.NET 工具 , 依次 VisualStudio.NET 命令提示 开始 。

注意 在 Visual Studio 2005、 Microsoft Visual Studio .NET 改为 Microsoft Visual Studio 2005 VisualStudio.NET 工具 更改为 VisualStudio 2005 工具 Visual Studio VisualStudio.NET 命令提示 更改为 Visual Studio2005 命令提示符
2. 要创建 Interop 程序集, 必须, 两请键入以下命令:
aximp /out:C:\temp\AxMyProject.dll " C:\Windows\System32\MyProject.ocx "
AxMyProject.dll 用于 AxHost Interop。 MyProject.dll 用于 COMInterop。

回到顶端

动态创建控件

1. 在 项目 菜单上, 单击 AddReference 。
2. 单击 浏览 , 然后选择 ActiveX 控件 Interop 程序集, 您只创建 (它们应该在 C:\Temp)。
3. 添加 AxMyProject.dll 和 MyProject.dll ; 本地添加这些文件复制。
4. 向窗体添加一个 按钮 控件。
5. 双击该按钮以寻找 按钮 Click 事件 方法代码。
6. 按钮 Click 事件 方法, 中粘贴如下代码:
  AxMyProject.AxMyLicensedControl  myControl = new AxMyProject.AxMyLicensedControl();
这将一个控件通过 AxHost 新实例。

注意 Do 不创建新实例对控件通过 COM (新建 MyProject.MyLicensedControl), 因为这不能在窗体, 并且不能轻松添加许可证。

回到顶端

许可证添加到控件

1. 确定并注意该控件运行时许可证密钥。 对于 MyLicensedControl , 许可证密钥是 " gnvlslnjskvlmlgnnimh "。
2. 按钮 Click 事件 方法, 中粘贴如下代码下面 " " AxTestActiveXComponent.AxUserControl1 myControl = 新 AxTestActiveXComponent.AxUserControl1();
  System.Reflection.FieldInfo f =
            typeof(AxHost).GetField("licenseKey",
            System.Reflection.BindingFlags.NonPublic |
            System.Reflection.BindingFlags.Instance);
            f.SetValue(myControl, "gnvlslnjskvlmlgnnimh");
此代码插入到控件运行时许可证。 它创建的 FieldInfo , 是 OCXState 属性包的一部分的实例。 此属性包已满的特定 ActiveX 控件信息。 此例, 获取字段 licenseKey 并为 myControl 设置它。 您必须完成为每个需要运行时许可证任何 ActiveX 控件实例。

回到顶端

向窗体添加控件

1. 将控件添加到窗体的 Controls 集合, 并然后显示控件。 要这样做, 您可以使用以下代码:
        Controls.Add(myControl);
            myControl.Show();
此代码粘贴到 按钮 Click 事件 方法, " f.SetValue(myControl, "gnvlslnjskvlmlgnnimh");, " 之后和之前 End Sub。

注意 如果许可证不添加到控件, 许可证是需要, myControl.Show 失败。 MyControl.Show 运行包含该许可证验证代码。 当您尝试并运行 myControl.Show , 看到以下错误处于调试模式:
system.windows.forms.dll 附加信息中出现处理异常的类型'System.ComponentModel.LicenseException': 没有许可证来使用该 ActiveX 控件。
或在运行时, 可能看到类似以下消息:
应用程序中已发生了未处理异常。
您没有许可证来使用该 ActiveX 控件。
2. 按 F 5 键运行该项目。
3. 单击按钮以向窗体添加 ActiveX 控件。

回到顶端

疑难解答

要点 注意以下有关此操作:
许可证必须添加到每个实例的所有 ActiveX 控件需要运行时许可证。 例如, 如果创建为 MyLicensedControl , 第二个实例您需要许可证也添加到该实例。
确保您具有正确的许可证密钥用于您控制。 确定正确的许可证密钥是特定于控件: http://msdn.microsoft.com/library/default.asp 确定密钥, 请单击下列文章编号以查看 Microsoft 知识库中相应:
151771 (http://support.microsoft.com/kb/151771/) Licreqst.exe 示例说明如何请求许可证密钥 VisualC++ 中的对象
或者, 可用于 Licenses.Add Visual Basic 6 中控制计算机注册表中具有许可证上。 Licenses.Add 返回运行时许可证, 它作为字符串添加 ; 然后您可以使用 Debug.Print 要获取许可证密钥。

回到顶端

参考

有关详细信息, 请单击下列文章编号, 查看 Microsoft 知识库文章中文章:
241126 (http://support.microsoft.com/kb/241126/) INFO: 动态添加用户控件, 需要运行时许可证
188577 (http://support.microsoft.com/kb/188577/) HOWTO: 什么许可证集合用于 ?
190670 (http://support.microsoft.com/kb/190670/) 如何向使用 Visual Basic 6.0 窗体动态添加控件
posted on 2007-09-26 16:59  Dragon-China  阅读(1849)  评论(0编辑  收藏  举报