免注册调用本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文件