MFC如何调用DLL(VC++)

2024-11-29 19:07:51
推荐回答(3个)
回答1:

  你得自己调显示的函数啊。你加载模块了得调相应的函数显示啊。
  步骤如下:
  1.加载动态库(使动态库程序运行)
  HMODULE LoadLibrary(
  LPCTSTR lpFileName
  // 动态库的名称或全路径
  );//返回动态库的实例句柄(HINSTANCE)。
  如果dll文件与.exe文件在同一路径下,只需要写动态库名称,不在同一路径下,则需写带盘符的全路径
  2.
  获取函数地址
  FARPROC GetProcAddress(
  HMODULE hModule,
  // 动态库实例句柄
  LPCSTR lpProcName
  // 函数名称
  );//执行成功,返回函数地址。

  //现在才是你需要注意的地方,比如你dll中有一个show函数是显示对话框的,你就根据上面第2步传show参数得到的函数地址,通过函数指针直接调用就可以显示了。

  3.
  卸载动态库
  BOOL FreeLibrary(
  HMODULE hLibModule
  // 动态库实例句柄
  );

回答2:

HINSTANCE hInst = LoadLibrary(L"User32.DLL"); // 加载DLL
if(hInst)
{
// 加载成功
// 定义待访问函数原型
typedef BOOL (WINAPI *MYFUNC)(HWND,COLORREF,BYTE,DWORD);
MYFUNC fun = NULL;
// 获取函数地址
fun=(MYFUNC)GetProcAddress(hInst, "SetLayeredWindowAttributes");
if(fun)
{
// 成功
fun(hWnd, RGB(0, 0, 0), 255, 2 | 1);
}
FreeLibrary(hInst); //释放 DLL
}

基本上就是这么一个流程,LoadLibrary->成功->获取函数入口点->调用函数->最后FreeLibrary,注意FreeLibrary是必须要实现的不然会造成资源泄漏。

回答3:

lib跟dll放一块儿

加入代码
#include "db.h" //或者写绝对路径

#pragma comment(lib,"db.lib") //或者写绝对路径

后面直接调用dll中的函数就可以了,参考db.h