如何制作DLL?

解决方案 »

  1.   

    按照以下步骤来完成:1)先来建立DLL。在VC菜单中File->New新建一个命名为ExplicitDLL的Win32 Dynamic-Link Library工程,下一步选择A simple DLL project。可以看到VC的AppWizard为我们准备了一个DllMain函数,本例中我们不用去改动它。2)在ExplicitDLL.cpp之中添加两个函数foo1和foo2,代码如下: void foo1()
    {
    MessageBox(NULL,"Called foo1 by function name!",NULL,MB_OK);
    }void foo2()
    {
    MessageBox(NULL,"Called foo2 by function ordinal!",NULL,MB_OK);
    }3)在VC菜单中File->New新建一个命名为ExplicitDLL.def的Text file,VC会自动将它加入到工程之中。在ExplicitDLL.def之中添加如下代码: LIBRARY ExplicitDLL

    EXPORTS
    foo1 @1
    foo2 @2 在这里,我们使用了模块定义文件(.def)的方式导出了2个函数。4)编译工程,生成ExplicitDLL.dll。5)在来建立调用程序。在VC菜单中File->New新建一个命名为UseExplicit的Win32 Console Application工程,下一步选择a simple application。并将ExplicitDLL.dll这个文件复制到工程目录内的Debug文件夹之中。6)在UseExplicit.cpp之中包含windows.h头文件,并且在main函数之中添加如下代码: typedef void (*foo1PROC)(void);
    typedef void (*foo2PROC)(void);

        HMODULE hDLL; 
        foo1PROC ProcFoo1;
        foo2PROC ProcFoo2;

    hDLL = LoadLibrary("ExplicitDLL"); 

        if (hDLL != NULL) 
        {
            ProcFoo1 = (foo1PROC) GetProcAddress(hDLL, "foo1");

    if(!ProcFoo1)
    MessageBox(NULL,"Call foo1 error!",NULL,MB_OK);
    else
    ProcFoo1();

    ProcFoo2 = (foo2PROC) GetProcAddress(hDLL, MAKEINTRESOURCE(2)); 

    if(!ProcFoo2)
    MessageBox(NULL,"Call foo2 error!",NULL,MB_OK);
    else
    ProcFoo2();

            FreeLibrary(hDLL); 
        }
    else
    MessageBox(NULL,"Load ExplicitDLL.dll error!",NULL,MB_OK);7)编译运行UseExplicit.exe,可以看到两个弹出对话框,程序运行成功。