MFC ActiveX 控件:分布 ActiveX 控件
本文讨论若干问题与重新发布 Activex 控件:
ANSI 或 Unicode 控制版本
安装 Activex 控件和可再发行 DLL
注册控件
说明 有关重新发布 Activex 控件的更多信息,请参见 重新分配控件。
ANSI 或 Unicode 控制版本
您必须决定是控件的 ANSI 或 Unicode 版本或两个。此决策基于可移植性因素内部在 ANSI 和 Unicode 字符集。
ANSI 控件,适用于所有 Win32 操作系统,允许在各种 Win32 操作系统的最大可移植性。Unicode 控件通过仅在 Windows NT (3.51 版或更高版本),但是,不能在 Windows 95 或 Windows 98。如果可移植性是您的前置的考虑,请传递 ANSI 控件。如果控件在 Windows NT 将只运行,可以传递 Unicode 控制。也可以选择有两种并将您的应用程序安装最适合该版本的与用户的操作系统。
安装 Activex 控件和可再发行 DLL
您可以使用的 Activex 控件的安装程序在其应创建 windows 目录的特定子目录并安装控件的 .OCX 文件。
说明 |
---|
使用 windows GetWindowsDirectory API 在安装程序获取 windows 目录的名称。您可能希望从您的公司或产品的名称派生的子目录的名称。 |
安装程序在 windows 系统目录必须安装必要的可再发行组件 DLL 文件。如果任何 DLL 已存在用户的计算机上,安装程序应它们的版本与您安装的版本进行比较。,仅在其版本号高于已安装的文件,请重新安装一个文件。
由于 Activex 控件在 OLE 容器应用程序只能使用,不需要分配全套与控件的 OLE DLL。可以假定,包含组件的应用程序 (或操作系统) 具有标准 OLE DLL 安装。
注册控件
才能使用控件,必须为其创建相应的项在 windows 注册数据库。某些 Activex 控件容器为用户提供菜单项注册新的控件,但是,此功能可能不可用在任何容器。因此,那么,当安装,您可能希望安装程序注册控件它们。
如果您愿意,可以直接编写自己的安装程序注册控件。
使用 LoadLibrary windows API 加载控件 DLL。接下来,使用 GetProcAddress 获取 “DllRegisterServer”函数的地址。最后,调用 DllRegisterServer 功能。下面的代码示例演示一种可能的方法, hLib 存储控件库句柄和 lpDllEntryPoint存储 “DllRegisterServer”函数的地址。
HINSTANCE hLib = LoadLibrary(pszDllName);
if (hLib < (HINSTANCE)HINSTANCE_ERROR)
{
AfxMessageBox(IDS_LOADLIBFAILED); //unable to load DLL
iReturn = FAIL_LOAD; //unable to load DLL
}
// Find the entry point.
lpDllEntryPoint = GetProcAddress(hLib, "DllRegisterServer");
if (lpDllEntryPoint != NULL)
(*lpDllEntryPoint)();
else
;// Unable to locate entry point
注册控件的优点直接是您不需要调用,将加载单独的进程 (即, REGSVR32),减小安装时。此外,在中,因为注册是内部于外部进程可以进程,安装程序更好地处理错误和无法预料的情况。
说明 |
---|
在安装程序安装 Activex 控件之前,应调用 OleInitialize。当您的安装程序完成后,调用 OleUnitialize。这样可确保该 OLE 系统 DLL 在中注册的 Activex 控件适当的状态。 |
应注册 MFCx0.DLL。