一个调用dll中的函数的例子
kelvin 发布于 2022-05-16

最近在看duilib的源码, CRenderEngine::DrawImage中有两行代码

	typedef BOOL (WINAPI *LPALPHABLEND)(HDC, int, int, int, int,HDC, int, int, int, int, BLENDFUNCTION);
	static LPALPHABLEND lpAlphaBlend = (LPALPHABLEND) ::GetProcAddress(::GetModuleHandle(_T("msimg32.dll")), "AlphaBlend");

可以看到先用typedef定义一个函数指针类型,参数跟AlphaBlend函数的参数一致,AlphaBlend函数的参数如下,

BOOL AlphaBlend( HDC hdcDest,
  int nXOriginDest,
  int nYOriginDest,
  int nWidthDest,
  int nHeightDest,
  HDC hdcSrc,
  int nXOriginSrc,
  int nYOriginSrc,
  int nWidthSrc,
  int nHeightSrc,
  BLENDFUNCTION blendFunction
);

然后就是两个重要的全局函数::GetModuleHandle和::GetProcAddress,从msimg32.dll中获取dll的模块句柄作为::GetProcAddress的实参,::GetProcAddress动态链接库(DLL)中的输出库函数地址给到上面定义的函数指针类型定义的变量,通过该变量就可以使用dll中的函数了。

kelvin
关注 私信
文章
92
关注
0
粉丝
0