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;
//装载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;
}
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类一样使用即可。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 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 重磅开源!