MFC如何调用DLL(VC++) 80

我现在要用MFC对话框,点击确定按钮,弹出另一个用uistyler创建的对话框(db),现在有db.dll,db.cpp,db.h,db.lib等文件。用:HINSTAN... 我现在要用MFC对话框,点击确定按钮,弹出另一个用uistyler创建的对话框(db),现在有db.dll,db.cpp,db.h,db.lib等文件。用:

HINSTANCE dll123;
dll123=LoadLibrary("D:\\USER\\application\\db.dll");
if (dll123 == NULL)
{
MessageBox("can,t");
}

貌似加载成功了,但怎么运行啊?弹不出来对话框啊?
展开
 我来答
ljt20061908
2013-09-08 · TA获得超过1033个赞
知道小有建树答主
回答量:527
采纳率:87%
帮助的人:203万
展开全部
  你得自己调显示的函数啊。你加载模块了得调相应的函数显示啊。
  步骤如下:
  1.加载动态库(使动态库程序运行)
  HMODULE LoadLibrary(
  LPCTSTR lpFileName
  // 动态库的名称或全路径
  );//返回动态库的实例句柄(HINSTANCE)。
  如果dll文件与.exe文件在同一路径下,只需要写动态库名称,不在同一路径下,则需写带盘符的全路径
  2.
  获取函数地址
  FARPROC GetProcAddress(
  HMODULE hModule,
  // 动态库实例句柄
  LPCSTR lpProcName
  // 函数名称
  );//执行成功,返回函数地址。

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

  3.
  卸载动态库
  BOOL FreeLibrary(
  HMODULE hLibModule
  // 动态库实例句柄
  );
追问
extern int call1 ( int *response )是db.cpp中的,应该是个入口,具体怎么做啊,能不能帮忙写下啊?
追答
我当调用这个函数能显示对话框啊。
1.typedef int (*DLL_CALL)(int* );//这是将函数指针类型定义出来,在头文件中的类声明前加上

2.在你调用LoadLibrary后会返回一个句柄hDll,想调用函数的时候

DLL_CALL myCall1 = (DLL_CALL) GetProcAddress( hDll, "call1" );
myCall1(/*内面填写你要传的参数*/);

现在就将call1函数调用了。
3.FreeLibrary(hDll);

你得确定call1确实是显示对话框函数,至少我从意思上看不像啊。db是数据库的
du瓶邪
2015-08-07 · TA获得超过2.4万个赞
知道大有可为答主
回答量:1.7万
采纳率:100%
帮助的人:2978万
展开全部
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是必须要实现的不然会造成资源泄漏。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
HiHotzenplotz
2013-09-08 · TA获得超过439个赞
知道小有建树答主
回答量:345
采纳率:62%
帮助的人:166万
展开全部
lib跟dll放一块儿

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

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

后面直接调用dll中的函数就可以了,参考db.h
追问
db.h和db.lib已经加进去了,调用call1时,编译成功,但不能生成, error LNK2001: 无法解析的外部符号 _call1,该怎么办啊?
追答
在dll导出函数前面使用extern "C" __declspec(dllexport)修饰而不是extern,再重新生成dll。
你那个dll根本就没有把函数导出嘛
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(1)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式