如题,请给出详细解答!谢谢!

解决方案 »

  1.   

    先建一个工作空间。然后加两个项目。一个产生exe,另一个产生dll
      

  2.   

    按照以下步骤来完成: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,可以看到两个弹出对话框,程序运行成功。
      

  3.   

    我按照 rivershan(笨猫)(爱情是什么?) 的步骤产生下面两个错误Compiling...
    ExplicitDLL.cpp
    Linking...
    ExplicitDLL.def : error LNK2001: unresolved external symbol foo1
    ExplicitDLL.def : error LNK2001: unresolved external symbol foo2
    Debug/ExplicitDLL.lib : fatal error LNK1120: 2 unresolved externals
    LINK : fatal error LNK1141: failure during build of exports file
    Error executing link.exe.ExplicitDLL.dll - 4 error(s), 0 warning(s)