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类一样使用即可。
 
                    
                
 
                
            
         浙公网安备 33010602011771号
浙公网安备 33010602011771号