985大学辽宁高考分数线:VC++中的Dll调用及Dll的调试
来源:百度文库 编辑:偶看新闻 时间:2024/10/06 13:11:25
做了这么久的程序,还没有花费三个小时来攻克某一个技术点。而VC却让我如此尴尬了一回。经过三小时的研究,终于解决了VC中调用Dll以及Dll的调试问题。
的确,网上相关资料有很多,但照着说明做后,没有一个能够成功运行的,不过对我的帮助还是非常大。
首先让我们来看看,在VC中如何调用Dll。这里我们仅仅说明程序中如何调用Dll,关于如何创建Dll请参考相关资料。
1、创建Win32 Dynamic-Link Library工程,命名为MyDll。
2、在MyDll.h文件如下。
#ifdefMYDLL_EXPORTS
#defineMYDLL_API __declspec(dllexport)
#else
#defineMYDLL_API __declspec(dllimport)
#endif
classMYDLL_API CMyDll {
public:
CMyDll(void);
};
MYDLL_APIint Max(int a, int b);
externMYDLL_API int nMyDll;
MYDLL_APIint fnMyDll(void);
3、在MyDll.cpp文件中实现该函数。
MYDLL_APIint 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,比较麻烦,更好的办法现在还没找到,还希望知道的朋友不吝赐教)自已搞定:其实,只要设置测试工程编译的文件的路径同DLL工程在同一目录下即可。
都说会C++的人抱本《java编程思想》一下午就能学会使用java。会java的也可以抱本《C++编程思想》一下午就能学会使用。其实话说回来,java如此深奥,并不是精通C++的人一两天能明白和了解的,如果说能够使用java写程序,那也只是简单的小程序。而C++何尝不是呢?
的确,网上相关资料有很多,但照着说明做后,没有一个能够成功运行的,不过对我的帮助还是非常大。
首先让我们来看看,在VC中如何调用Dll。这里我们仅仅说明程序中如何调用Dll,关于如何创建Dll请参考相关资料。
1、
2、
#ifdef
#define
#else
#define
#endif
class
public:
};
MYDLL_API
extern
MYDLL_API
3、
MYDLL_API
{
}
4、
LIBRARY
EXPORTS
5、
6、
7、
Dll调用已经可以了。那么接下来让我们来看看,如何调试Dll程序。Dll程序本身是不可以启动运行的,必须依赖与应用程序的帮忙。继续我们上面的例子。
1、
2、
3、
4、
5、
6、
都说会C++的人抱本《java编程思想》一下午就能学会使用java。会java的也可以抱本《C++编程思想》一下午就能学会使用。其实话说回来,java如此深奥,并不是精通C++的人一两天能明白和了解的,如果说能够使用java写程序,那也只是简单的小程序。而C++何尝不是呢?
VB调用VC写的DLL
VC调用Delphi写的dll的问题
调用VC++生成的.DLL文件提示“内存访问冲突”
asp中如何调用C++编写的DLL中的函数?
C++builder4创建及调用DLL
skinmagic 的dll调用问题
使用VC++编写的dll文件中的错误
delphi可以调用采用其他的语言编写的dll文件吗?比如vc编写的!
VB怎样调用DLL中的资源
急:VB6 调用DLL中的API
非高手不能答:关于vc写的dll,以及调用时的问题。
delphi可以调用采用其他语言编写的dll文件吗?比如vc的?
用VB调用VC编写的DLL的参数传递问题
用UG调用VC++生成的.dll文件提示内存访问冲突
VC做的DLL问题
vb.net如何引用C++写DLL文件?及函数的调用方法?
向高手请教DLL的调用
vb中调用dll的问题。
怎么看QQ主程序调用的DLL?
关于DLL的远程调用问题
vb调用dll出错
.dll动态链接调用?
直接调用dll
DLL静态调用