VC使用Activex DLL(VB6)

第一步:

#import "XXXXX.dll" //ActivexDLL

编译一下 VS会 生成XXXXX.tlh和XXXXX.tli(使用时主要参考tlh文件)

第二步:

A 、参考tlh文件,using namespace ???

B、定义变量 _XXXXX*   m_????

第三步:

A. 记得在线程中 CoInitialize(NULL);CoUnitialize();

B. 如果DLL没有注册(需要管理员权限),则注册:

复制代码
LPCTSTR pszDllName=_T("XXXXX.dll"); 
    //装载ActiveX控件 
    HINSTANCE hLib = LoadLibrary(pszDllName); 
    if (hLib < (HINSTANCE)HINSTANCE_ERROR) 
    { 
        MessageBox(_T("不能载入Dll文件!"),_T("结果"),MB_OK); 
        return    FALSE; 
    } 
    //获取注册函数DllRegisterServer地址 
    FARPROC lpDllEntryPoint; 
    lpDllEntryPoint = GetProcAddress 
        (hLib,"DllRegisterServer"); 
    //调用注册函数DllRegisterServer 
    if(lpDllEntryPoint!=NULL) 
    { 
        if(FAILED((*lpDllEntryPoint)())) 
        { 
            MessageBox(_T("调用DllRegisterServer失败!\r\n如果是在Vista中运行:\r\n请右击程序,选择“以管理员身份运行”即可"),_T("结果"),MB_OK); 
            FreeLibrary(hLib); 
            return FALSE; 
        }; 
        //MessageBox("注册成功","结果",MB_OK);         

        return TRUE;
    } 
    else 
        //MessageBox("调用DllRegisterServer失败!" ,"结果",MB_OK); 
        return FALSE;
复制代码

 第四步 在适当位置初始化变量:

复制代码
HRESULT hresult;
        CLSID clsid;
        //初始化COM接口
        hresult=CLSIDFromProgID(OLESTR("LeesOfficeActivex.LeesOfficeEditor"), &clsid);
        //得到组件的CLSID

        
//这就是我们在LeesWordEditor.DLL中定义的类
        hresult=CoCreateInstance(clsid,NULL,CLSCTX_INPROC_SERVER,__uuidof(_LeesOfficeEditor),(LPVOID *) &mOfficeEditor_doc);
        hresult=CoCreateInstance(clsid,NULL,CLSCTX_INPROC_SERVER,__uuidof(_LeesOfficeEditor),(LPVOID *) &mOfficeEditor_ppt);
        //初始化CLSADO,CoCreateInstance()的第一个参数是对象的CLSID(类代码),
        
//这个128位的编码唯一地标识了组件服务,它的路径和运行参数等信息都放在系统注册表中;
        
//第二个参数一般情况下设为NULL;
        
//第三个参数用来指明对象的运行环境,如远程或本地,此处设为CLSCTX_INPROC_SERVER,
        
//标明是服务组件是一个DLL;
        
//第四个参数指明用来与对象通信接口的ID,这也是一个128位的编码;
        
//第五个参数是用来接收对象的接口指针。
        if(FAILED(hresult))
        {        
            AfxMessageBox(_T("初始化服务组件失败"));
            return    FALSE;        
        }
复制代码

 

 最后,如VC类一样使用即可。

 

 

 

 

posted @   吾非无心  阅读(3130)  评论(0编辑  收藏  举报
编辑推荐:
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
阅读排行:
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 地球OL攻略 —— 某应届生求职总结
· 提示词工程——AI应用必不可少的技术
· 字符编码:从基础到乱码解决
· Open-Sora 2.0 重磅开源!
点击右上角即可分享
微信分享提示