不注册COM组件直接调用接口

 本文以COM组件AppLogo.dll为例,AppLogo.dll中提供了IDunRui接口,在不使用regsvr32向系统注册的情况下创建IDunRui接口并调用。

一、导入组件或类型库;

    在C++中使用COM组件,需要向其提供类型库,以公开接口和方法。类型库文件类型为tlb文件,直接#import导入即可。类型库也可以以资源形式编译进COM组件Dll内部,资源类型为TYPELIB,资源号为1即可。如果Dll中已包含类型库,只需#import导入COM组件Dll文件即可。代码如下:

复制代码
#import "AppLogo.dll" no_namespace
// or...
#import "AppLogo.tlb" no_namespace
// or...
#import "AppLogo.dll"
using namespace AppLogo;
// or...
#import "AppLogo.tlb" 
using namespace AppLogo;
复制代码

二、动态载入COM组件并创建接口。

复制代码
// Declare in class as a member.
CDllFromFile m_dllCOM;

// Load Dll file.
m_dllCOM.LoadLibrary(_T("AppLogo.dll"));

//TODO in initializing.
IDunRui *pDunrui = NULL;
CComQIPtr<IClassFactory> pClassFactory;

typedef HRESULT (__stdcall *fnDllGetClassObject)(REFCLSID rclsid, REFIID riid, LPVOID *ppv);

fnDllGetClassObject pDllGetClassObject = (fnDllGetClassObject)m_dllCom.GetProcAddress("DllGetClassObject");
if (NULL != pDllGetClassObject)   
{
      HRESULT hr = pDllGetClassObject(__uuidof(AppLogo::DunRui), IID_IClassFactory, (LPVOID*)&pClassFactory);
      if (S_OK == hr)
      {
          hr = pClassFactory->CreateInstance(NULL, __uuidof(AppLogo::IDunRui), (LPVOID*)&pDunrui);
          if (S_OK == hr)
          {
                AfxMessageBox(_T("Succeed !"));
          }
      } 
}
复制代码

CDllFromFile源码下载:http://url.cn/L39MWg


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值