免注册调用本COM组件
功能简介:
本组件支持免注册方式调用,无需在系统注册表中注册COM组件即可使用。通过RegDll.dll动态设置COM组件路径,实现零安装部署。
适用场景:
1. 需要将组件随程序一起分发,无需单独安装
2. 无管理员权限环境下使用组件
3. 需要在不同目录或版本间灵活切换组件
使用步骤:
1. 加载RegDll.dll
2. 调用SetDllPath设置qql.dll的路径
3. 创建qqlsoft对象并使用
4. 使用完毕后释放资源
API说明:
SetDllPathA(const char* com_dll_path)
参数: com_dll_path - qql.dll的完整路径(ANSI)
返回值: 非零表示成功,0表示失败
SetDllPathW(const wchar_t* com_dll_path)
参数: com_dll_path - qql.dll的完整路径(Unicode)
返回值: 非零表示成功,0表示失败
C++示例代码:
#include
#include
#include "obj.h"
typedef long (WINAPI* pSetDllPathA)(const char* path);
typedef long (WINAPI* pSetDllPathW)(const wchar_t* path);
int main() {
// 步骤1: 加载QsReg.dll
HMODULE hRegDll = LoadLibraryA("RegDll.dll");
if (!hRegDll) {
printf("加载QsReg.dll失败\n");
return -1;
}
// 步骤2: 获取SetDllPath函数地址
pSetDllPathA setPath = (pSetDllPathA)GetProcAddress(hRegDll, "SetDllPathA");
if (!setPath) {
printf("获取SetDllPathA函数失败\n");
FreeLibrary(hRegDll);
return -1;
}
// 步骤3: 设置qql.dll路径
long ret = setPath("E:\\FindPic\\x64\\Release\\qql.dll");
if (!ret) {
printf("设置qql.dll路径失败\n");
FreeLibrary(hRegDll);
return -1;
}
printf("设置路径成功\n");
// 步骤4: 创建COM对象并使用
CoInitialize(NULL);
qqlsoft* g_lw = new qqlsoft();
// 调用组件功能
tstring ver = g_lw->Ver();
printf("版本号: %ls\n", ver.c_str());
// 步骤5: 清理资源
delete g_lw;
CoUninitialize();
FreeLibrary(hRegDll);
return 0;
}
注意事项:
1. QsReg.dll和qql.dll必须位于可访问的路径
2. 路径必须使用完整路径,不能使用相对路径
3. 建议在程序启动时调用SetDllPath,且只需调用一次
4. 使用完毕后务必调用FreeLibrary释放RegDll.dll
5. 32位和64位程序需对应使用相同位数的DLL文件