现在的位置: 首页 > 综合 > 正文

Win7下VS2010创建、使用和调试DLL

2013年09月18日 ⁄ 综合 ⁄ 共 1734字 ⁄ 字号 评论关闭
Win7下VS2010创建、使用和调试DLL
————
更新于2012年8月22日 星期三

http://blog.csdn.net/shunqiziranhao007/article/details/7897772

————
建立一个空的解决方案,添加一个名为 Win32DLL 的Win32 Project的空的dll工程,再添加一个名为 UseWin32DLL 的Win32 Project的空的Windows Application工程。

我常用的做法是 工程,属性,Configuration Properties,Linker,System,SubSystem,设置为not set,这样就不需要考虑是子系统是Windows还是Console,vs会自动进行选择。

由于是在同一个解决方案中,所以两个工程的属性,Configuration Properties,Gerneral,Output Directory,都是$(SolutionDir)$(Configuration)\,这样Win32DLL工程生成的dll和UseWin32DLL工程生成的exe在同一个目录下了,这样就可以实现dll的调试了。
 
还有一种调试dll的方式是在Win32DLL工程的属性,Configuration Properties,Gerneral,Command中设置exe的绝对路径,我这里是,E:\ComputerScience\Debug\VS2010\Debug\UseWin32DLL.exe。
 
在指定位置设置断点就可以就行相应的调试了。
 
在Win32DLL工程添加cpp文件,添加下面的代码用来创建dll。
/*
功能,创建dll。
日期,2012年8月22日 星期三
环境,win7-32-vs2010
*/
// 这是dll,所以我声明该宏,表明要导出
#define DLL_EXPORTS

#ifdef DLL_EXPORTS
    // 被 __declspec(dllexport) 修饰,说明是要被导出的
    #define DLL_API __declspec(dllexport)
#else
    // 被 __declspec(dllimport) 修饰,说明是要被导入的
    #define DLL_API __declspec(dllimport)
#endif

// 被extern "C"修饰的变量和函数是按照C语言方式编译和连接的。为什么这么用可以
// 查查资料,如百度百科。
extern "C" DLL_API int add(int a, int b)
{
    return a + b;
}

在UseWin32DLL工程添加cpp文件,添加下面的代码用来测试dll。
/*
功能,使用dll。$(SolutionDir)$(Configuration)\
日期,2012年8月222日 星期三
环境,win7-32-vs2010
*/
#include <iostream>
#include <Windows.h>

using namespace std;

typedef int(* FUN)(int , int);

int main()
{
    // 导入dlll,导入后要进行判断,看看导入是否成功,不成功就提示失败并终止
    // 程序,这是一种意识。
    HMODULE hDLL = LoadLibrary(L"Win32DLL.dll");
    if (hDLL)
    {
        // 获取dll中的函数地址,获取后也要进行判断,为空就进行提示。
        FUN pAdd = FUN(GetProcAddress(hDLL, "add"));
        if (pAdd)
        {
            cout << pAdd(1, 3) << endl;
        }
        else
        {
            MessageBox(NULL, L"获取add函数失败!", L"测试", MB_OK);
            return -1;
        }
    }
    else
    {
        MessageBox(NULL, L"导入dll失败!", L"测试", MB_OK);
        return -1;
    }
    FreeLibrary(hDLL);
    MessageBox(NULL, L"测试成功", L"测试", MB_OK);

    return 0;
}

右键UseWin32DLL工程,Set as Startup Project。

build后解决方案下Debug文件夹的内容如下:
运行效果如下所示:



调试方式是,在下图所示的位置处,设置断点,然后按F5就可以进行调试了。





抱歉!评论已关闭.