《COM本质论》第一章学习(3)

环境:

有一个名为ComDll.dll的动态库,导出了一个名为"CreateFastString"的函数,函数返回与IFastString所指向的vptr兼容的指针。(《COM本质论》中的例子)

 

实现:

static IFastString * (*pfn)(const char *psz) = 0;
 if (!pfn)
 {
  const TCHAR szDll[] = _T("ComDll.dll");
  const CHAR szFn[] = "CreateFastString";

  HINSTANCE hDll = LoadLibrary(szDll);
  if (hDll)
  {
   *(FARPROC*)&pfn = GetProcAddress(hDll,szFn);
  }
 }

 

说明:

主要用到一个技术和两个函数:

1、使用函数指针以及函数指针之间的类型转换;

2、LoadLibrary()加载动态库的函数;

3、GetProcAddress()从已加载的动态库中找指定名称的函数的入口地址

 

好处:

1、如果程序执行部分没有调用到动态库中的函数,那么,动态库就不会被加载到内存中,节省空间,同时也能加快程序的初始化,加快进程地址空间的初始化和保留更多的地址空间。

2、如果加载动态库失败,或者获取函数入口地址失败,都能够在程序运行时发现,可以避免程序因动态库而出错,是程序在没有动态库的情况下也能正常运行,就像Windows使用可选的组件一样,例如当WinSock动态库不存在时,系统同样能够正常运行。

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值