一个替代“regsvr32.exe"COM组件注册工具的方法是手动调用COM模块中的DllRegisterServer.
步骤如下
1. 定义DllRegisterServer的函数指针类型
2. 调用LoadLibrary()加载COM模块
3. 调用GetProcAddress()获得DllRegisterServer的地址
4. 调用OleInitialize()初始化COM库
5. 使用之前得到的地址调用DllRegisterServer
6. 执行必要的清理工作: 清理COM库,卸载DLL
经过测试的代码实例
typedef HRESULT (WINAPI *FREG)();
// @strPathName[in]: COM组件的路径和文件名
BOOL Register(const CString& strPathName)
{
HMODULE hMod =::LoadLibrary(strPathName);
if(!hMod)
return FALSE;
// 这一步是必须的,我在网上查到的例子没有提到,
// 耽误很多时间
HRESULT hResult = ::OleInitialize(NULL);
if(hResult != S_OK)
{
::FreeLibrary(hMod);
return FALSE;
}
FREG lpfunc = (FREG)::GetProcAddress(hMod, _T("DllRegisterServer"));
if(!lpfunc)
{
::FreeLibrary(hMod);
::OleUninitialize();
return FALSE;
}
hResult = lpfunc();
::OleUninitialize();
::FreeLibrary(hMod);
return (hResult == S_OK);
}
对DllUnregisterServer的调用类同,一定要初始化COM库再调用。
from http://blog.sina.com.cn/
more
闪电破解Word文档密码
DOM应用---遍历网页中的元素
Rss网游软件最新更新-外挂几款小游戏
在IE右键菜单中添加菜单项
将 ActiveX 控件集成到 SWT 应用程序
使用IE控件的一些有趣方法
分享到:
相关推荐
DllRegisterServer 调用失败解决方法 在 Windows 操作系统中,DllRegisterServer 调用失败是件常见的问题,导致这种问题的 nguyên因通常是权限不够所致。下面我们将详细介绍如何解决这个问题。 一、解决 Dll...
首先,需要引入外部方法,然后调用DllRegisterServer()方法来注册DLL控件。 判断DLL是否已经注册 在注册DLL控件之前,我们需要判断DLL是否已经注册过了。我们可以通过读取注册表来判断DLL是否已经注册过了。如果...
1. `RegisterLibrary.bas`: 这可能是VB6的源代码,用于演示如何调用`DllRegisterServer`和`DllUnregisterServer`。 2. `RegisterLibrary.cfg`: 可能是VB6的配置文件,用于编译设置。 3. `DLLMain.dcu`: Delphi的编译...
最后,当你的应用或者安装程序需要注册组件时,只需调用`LoadLibrary`加载DLL,然后通过`GetProcAddress`获取`Register`和`Unregister`的地址,调用它们即可。 总结来说,Delphi实现COM组件的自动注册与卸载涉及...
这个过程会加载DLL文件,并调用其中的`DllRegisterServer`函数,完成组件的注册。同样,如果需要取消注册,可以使用`regsvr32.exe /u c:\test.dll`。 2. **在MTS(微软事务服务器)/MSMQ中注册**: MTS(Microsoft...
通过一个简单的组件实现两个接口,CoCreateInstance 调用 DLLGetClassObject返回相应的组件类厂 类厂调用CreateInstance创建组件 用DLLRegisterServer向注册表中加一个组件ID,前提是要对注册表中CLSID下的结构有...
- 使用`Project/Build`菜单下的`Register`选项来注册生成的`PCOMServer.dll`文件。 - 注册成功后,可以在Windows注册表`HKEY_CLASSES_ROOT`下找到对应的COM组件信息,包括其CLSID(如`{59834F03-49F1-11D3-B85B-00E...
4. **注册COM组件**:使用`regsvr32.exe`工具或者在代码中调用`DllRegisterServer`函数来注册DLL,使其可以在系统中被其他应用程序识别。 5. **设置属性**:在ATL工程的属性页中,配置必要的COM属性,如类ID(CLSID...
这个工具可以加载指定的DLL文件并执行其内部的DllRegisterServer函数,完成注册操作。例如,对于文件名“regvtcom.dll”,可以在命令行输入`regsvr32 regvtcom.dll`来注册该组件。 6. **反注册组件**:当不再需要...
其中,`选项`可以包括 `/u`(取消注册)和 `/n`(不调用DllRegisterServer)等。 三、取消COM组件注册 取消注册COM组件同样使用`regsvr32`命令,但需加上 `/u` 参数,示例如下: ``` regsvr32 /u <组件路径> ``` ...
这一过程通常涉及到调用DLL中的`DllRegisterServer`函数,该函数负责在注册表中创建必要的键值对,从而实现DLL的注册。 #### 二、注册DLL文件的步骤 1. **确定注册命令**:注册DLL文件的主要工具是`regsvr32.exe`...
在这个示例中,`LoadLibrary`加载DLL,`GetProcAddress`获取`DllRegisterServer`的地址,然后调用该函数进行注册。如果找不到`DllRegisterServer`,则会抛出异常。 在实际应用中,你可能需要根据具体需求选择合适的...
- `/n` 表示不调用DllRegisterServer(no DllRegisterServer)。 - `/i` 表示调用DllInstall,并可选地传入命令行参数(install)。 例如,注册一个名为`DllTest.dll`的文件,可以使用以下命令: ``` regsvr32 /s C...
无论是直接调用`DllRegisterServer`还是通过`LoadLibrary`和`GetProcAddress`间接调用,都能满足不同场景下的需求,使得应用程序能够更加灵活地管理外部组件的注册过程。掌握这些技巧,将大大提升开发者的技能,使其...
4. **DllRegisterServer**:将COM组件注册到注册表中。 5. **DllUnregisterServer**:删除注册表中关于COM组件的信息。 #### 四、实现注册函数 接下来,我们来看一下如何具体实现`DllRegisterServer`和`...
3. **注册组件**:在Windows上,为了让系统识别和使用组件,需要通过命令行工具(如regsvr32.exe)进行注册。注册过程会将组件的相关信息添加到系统的注册表中,使得应用程序可以在运行时找到并使用该组件。 4. **...
在某些情况下,如果你不希望在特定环境中注册控件,你可以选择不调用`DllRegisterServer`。 在Delphi中,你可以通过以下方式实现这个功能: ```delphi procedure RegisterControl(FileName: string); var ...
以上介绍了几种常见的ActiveX控件注册方法,包括使用`Regsvr32.exe`命令行工具、通过安装程序自动注册以及手动调用`DllRegisterServer`函数等。每种方法都有其适用场景,开发者可以根据实际情况选择最适合的方式。...
因为DevExpress组件通常需要注册才能在新的工程中使用,所以DLL中的DevExpress组件必须在DLL初始化时进行注册。这通常通过在DLL的初始化部分调用`RegisterComponents`函数来完成。 总之,这个Delphi6 Dll封装ADO...
4. 如果注册成功,会弹出一个对话框显示“DllRegisterServer在SpVoice.dll中成功”。如果没有错误,你可以关闭命令提示符窗口。 5. 重启计算机,检查问题是否已解决。 **方法二:修复或重新安装SAPI** 1. 打开控制...