VC++中的Dll调用及Dll的调试
来源:互联网 发布:淘宝童装店设计思路 编辑:程序博客网 时间:2024/06/08 03:48
首先让我们来看看,在VC中如何调用Dll。这里我们仅仅说明程序中如何调用Dll,关于如何创建Dll请参考相关资料。
1、 创建Win32 Dynamic-Link Library工程,命名为MyDll。
2、 在MyDll.h文件如下。
#ifdef MYDLL_EXPORTS
#define MYDLL_API __declspec(dllexport)
#else
#define MYDLL_API __declspec(dllimport)
#endif
class MYDLL_API CMyDll {
public:
CMyDll(void);
};
MYDLL_API int Max(int a, int b);
extern MYDLL_API int nMyDll;
MYDLL_API int fnMyDll(void);
3、 在MyDll.cpp文件中实现该函数。
MYDLL_API int Max(int a, int b)
{
if(a>b)
return a;
else
return b;
}
4、 创建MyDll.def文件对Dll函数进行定义。(这一步必须做)
LIBRARY “MyDll”
EXPORTS
Max
5、 编译后,会在该工程的Debug目录下生成相应该的Dll文件。
6、 新建应用程序(.exe)TestDll,在应用程序中加入如下代码。(该工程的路径就放在MyDll工程目录下,也可以放在其它地方,不过设置的时候要注意路径)
typedef int (* LPFNDLLFUNC)(int ,int);
LPFNDLLFUNC lpfnDllFunc;
HINSTANCE hInst = LoadLibrary(”E:// MyDll//Debug//MyDll.DLL”);
if (hInst == NULL)
MessageBox(”err”, NULL, MB_OK);
else
MessageBox(”ok”, NULL, MB_OK);
lpfnDllFunc = (LPFNDLLFUNC)GetProcAddress(hInst, “Max”);
if (lpfnDllFunc == NULL)
MessageBox(”err get”, NULL, MB_OK);
else {
int a;
CString str = “”;
a = lpfnDllFunc(1,2);
str.Format(”a:%d”,a);
MessageBox(str, NULL, MB_OK);
}
FreeLibrary(hInst);
7、 编译运行成功。
Dll调用已经可以了。那么接下来让我们来看看,如何调试Dll程序。Dll程序本身是不可以启动运行的,必须依赖与应用程序的帮忙。继续我们上面的例子。
1、 右键点击工程TestDll->Setting->Link->import->object/library中输入MyDll.lib路径。
2、 在程序中导入Dll头文件。#include “MyDll2.h”
3、 在程序中加入以下代码。
int a;
CString str = “”;
a = Max(1,2);
str.Format(”a:%d”,a);
MessageBox(str, NULL, MB_OK);
4、 编译,这时编译器会提示找不到指定的头文件。(因为不了解原理,我在这里卡了N久)这里需要设置一下。右键点击工程TestDll-> Setting->C/C++-> processor->include file path中输入要引用头文件的地址(./,../)。
5、 将生成的MyDll.dll文件拷贝至TestDll工程下的Debug目录下。
6、 在MyDll工程中设置断点,并将其设置为默认动行的程序。运行时会弹出对话框,选择TestDll.exe即可。自已搞定:其实,只要设置测试工程编译的文件的路径同DLL工程在同一目录下即可。
- VC++中的Dll调用及Dll的调试
- VC++中的Dll调用及Dll的调试
- VC动态调用DLL的调试方法
- VC动态调用DLL的调试方法
- VC中DLL的创建及调用
- VC2010调用DLL及调试DLL
- VC++ 创建及调用Dll
- VC中调用调试自己项目的DLL
- VC中调用调试自己项目的DLL
- VC DLL程序的调试
- vc++调试注入的DLL
- c# 调用native vc dll 如何调试
- VC中DLL的调用
- vc的dll调用问题
- vc调用matlab的dll
- vb调用vc的dll
- VC++调用dll的方法
- VC调用C#的DLL
- 关于oracle存储过程的问题
- 玩物丧志
- 广州市政府批准经济发展规划 将建新世纪CBD
- SSH2框架使用(一)
- 一个unix的贪吃蛇小游戏
- VC++中的Dll调用及Dll的调试
- MFC框架流程(vc++深入详解第3课)
- 在Magento 设计集成中关于products list等页面中TD或LI 的等高处理(分行处理)
- 错落有致——集团企业信息化规划原则
- 程序员创业生死一线 最后归宿在哪里?
- 系统处理非模态对话框和模态对话框的区别
- JavaScript 中的基本数据类型 数组 循环
- SSH2框架使用(二)
- 模式对话框与非模式对话框的区别